// package.json
var package_default = {
  name: "\u5145\u7535\u5B89\u5168\u7BA1\u7406\u5E73\u53F0",
  version: "3.7.0",
  author: {
    name: "\u5317\u4EAC\u56FD\u70AC\u4FE1\u606F\u6280\u672F\u6709\u9650\u516C\u53F8",
    email: "jeecgos@163.com",
    url: "https://www.jeecg.com"
  },
  type: "module",
  scripts: {
    alphaDeploy: "node ./deploy.js",
    pinstall: "pnpm install",
    "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite",
    dev: "cross-env REPORT=true  vite",
    build: "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=8192 vite build && esno ./build/script/postBuild.ts",
    "build:report": "pnpm clean:cache && cross-env REPORT=true npm run build",
    preview: "npm run build && vite preview",
    reinstall: "rimraf pnpm-lock.yaml && rimraf yarn.lock && rimraf package.lock.json && rimraf node_modules && npm run install",
    "clean:lib": "rimraf node_modules",
    "gen:icon": "esno ./build/generate/icon/index.ts",
    "batch:prettier": 'prettier --write  "src/**/*.{js,json,tsx,css,less,scss,vue,html,md}"',
    "upgrade:log": "conventional-changelog -p angular -i CHANGELOG.md -s",
    "husky:install": "husky install"
  },
  dependencies: {
    "@ant-design/colors": "^7.0.2",
    "@ant-design/icons-vue": "^7.0.1",
    "@iconify/iconify": "^3.1.1",
    "@jeecg/online": "3.7.0-beta",
    "@vue/shared": "^3.4.19",
    "@vueuse/core": "^10.8.0",
    "@zxcvbn-ts/core": "^3.0.4",
    "ant-design-vue": "^4.1.2",
    axios: "^1.6.7",
    "china-area-data": "^5.0.1",
    clipboard: "^2.0.11",
    codemirror: "^5.65.3",
    "cron-parser": "^4.9.0",
    cropperjs: "^1.6.1",
    "crypto-js": "^4.2.0",
    dayjs: "^1.11.10",
    "dom-align": "^1.12.4",
    echarts: "^5.4.3",
    "echarts-gl": "^2.0.9",
    "emoji-mart-vue-fast": "^15.0.1",
    "enquire.js": "^2.1.6",
    "intro.js": "^7.2.0",
    "lodash-es": "^4.17.21",
    "lodash.get": "^4.4.2",
    md5: "^2.3.0",
    mockjs: "^1.1.0",
    "node-ssh": "^13.2.0",
    nprogress: "^0.2.0",
    "path-to-regexp": "^6.2.1",
    pinia: "2.1.7",
    qrcode: "^1.5.3",
    qs: "^6.11.2",
    "resize-observer-polyfill": "^1.5.1",
    sortablejs: "^1.15.2",
    vue: "^3.4.19",
    "vue-cropper": "^0.6.4",
    "vue-cropperjs": "^5.0.0",
    "vue-i18n": "^9.9.1",
    "vue-infinite-scroll": "^2.0.2",
    "vue-router": "^4.3.0",
    "vue-types": "^5.1.1",
    vuedraggable: "^4.1.0",
    "vxe-table": "4.6.17",
    "vxe-table-plugin-antd": "4.0.7",
    "xe-utils": "3.5.26",
    xss: "^1.0.14"
  },
  devDependencies: {
    "@commitlint/cli": "^18.6.1",
    "@commitlint/config-conventional": "^18.6.2",
    "@iconify/json": "^2.2.185",
    "@purge-icons/generated": "^0.10.0",
    "@rys-fe/vite-plugin-theme": "^0.8.6",
    "@types/codemirror": "^5.60.15",
    "@types/crypto-js": "^4.2.2",
    "@types/fs-extra": "^11.0.4",
    "@types/inquirer": "^9.0.7",
    "@types/intro.js": "^5.1.5",
    "@types/jest": "^29.5.12",
    "@types/lodash-es": "^4.17.12",
    "@types/mockjs": "^1.0.10",
    "@types/node": "^20.11.19",
    "@types/nprogress": "^0.2.3",
    "@types/qrcode": "^1.5.5",
    "@types/qs": "^6.9.11",
    "@types/sortablejs": "^1.15.8",
    "@typescript-eslint/eslint-plugin": "^6.17.0",
    "@typescript-eslint/parser": "^6.17.0",
    "@vitejs/plugin-vue": "^4.3.3",
    "@vitejs/plugin-vue-jsx": "^3.1.0",
    "@vue/compiler-sfc": "^3.4.4",
    "@vue/test-utils": "^2.4.4",
    autoprefixer: "^10.4.17",
    commitizen: "^4.3.0",
    "conventional-changelog-cli": "^4.1.0",
    "cross-env": "^7.0.3",
    "cz-git": "^1.8.0",
    czg: "^1.8.0",
    dotenv: "^16.3.1",
    eslint: "^8.56.0",
    "eslint-config-prettier": "^9.1.0",
    "eslint-define-config": "^2.1.0",
    "eslint-plugin-jest": "^27.9.0",
    "eslint-plugin-prettier": "^5.1.3",
    "eslint-plugin-vue": "^9.21.1",
    esno: "^4.0.0",
    "fs-extra": "^11.2.0",
    "http-server": "^14.1.1",
    husky: "^8.0.3",
    inquirer: "^9.2.15",
    "is-ci": "^3.0.1",
    jest: "^29.7.0",
    less: "^4.2.0",
    "lint-staged": "15.2.2",
    "npm-run-all": "^4.1.5",
    picocolors: "^1.0.0",
    postcss: "^8.4.35",
    "postcss-html": "^1.6.0",
    "postcss-less": "^6.0.0",
    prettier: "^3.2.5",
    "pretty-quick": "^4.0.0",
    rimraf: "^5.0.5",
    rollup: "^4.12.0",
    "rollup-plugin-visualizer": "^5.12.0",
    stylelint: "^16.2.1",
    "stylelint-config-prettier": "^9.0.5",
    "stylelint-config-recommended": "^14.0.0",
    "stylelint-config-recommended-vue": "^1.5.0",
    "stylelint-config-standard": "^36.0.0",
    "stylelint-order": "^6.0.4",
    "ts-jest": "^29.1.2",
    "ts-node": "^10.9.2",
    typescript: "^4.9.5",
    unocss: "^0.58.5",
    "unplugin-auto-import": "^0.18.6",
    vite: "^5.2.11",
    "vite-plugin-compression": "^0.5.1",
    "vite-plugin-html": "^3.2.2",
    "vite-plugin-mkcert": "^1.17.3",
    "vite-plugin-mock": "^2.9.6",
    "vite-plugin-optimize-persist": "^0.1.2",
    "vite-plugin-package-config": "^0.1.1",
    "vite-plugin-purge-icons": "^0.10.0",
    "vite-plugin-svg-icons": "^2.0.1",
    "vite-plugin-vue-setup-extend-plus": "^0.1.0",
    "vue-eslint-parser": "^9.4.2",
    "vue-tsc": "^1.8.27"
  },
  repository: {
    type: "git",
    url: "git+https://github.com/jeecgboot/JeecgBoot.git"
  },
  license: "MIT",
  bugs: {
    url: "https://github.com/jeecgboot/JeecgBoot/issues"
  },
  homepage: "https://www.jeecg.com",
  engines: {
    node: "^12 || >=14"
  }
};

// vite.config.ts
import dayjs from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js";
import { loadEnv } from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/vite@5.4.3_@types+node@20.16.3_less@4.2.0_terser@5.31.6/node_modules/vite/dist/node/index.js";
import { resolve as resolve2 } from "path";

// build/config/themeConfig.ts
import { generate } from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/@ant-design+colors@7.1.0/node_modules/@ant-design/colors/lib/index.js";
var primaryColor = "#1890FF";
function generateAntColors(color, theme2 = "default") {
  return generate(color, {
    theme: theme2
  });
}
function getThemeColors(color) {
  const tc = color || primaryColor;
  const lightColors = generateAntColors(tc);
  const primary = lightColors[5];
  const modeColors = generateAntColors(primary, "dark");
  return [...lightColors, ...modeColors];
}
function generateColors({
  color = primaryColor,
  mixLighten: mixLighten2,
  mixDarken: mixDarken2,
  tinycolor: tinycolor2
}) {
  const arr = new Array(19).fill(0);
  const lightens = arr.map((_t, i) => {
    return mixLighten2(color, i / 5);
  });
  const darkens = arr.map((_t, i) => {
    return mixDarken2(color, i / 5);
  });
  const alphaColors = arr.map((_t, i) => {
    return tinycolor2(color).setAlpha(i / 20).toRgbString();
  });
  const shortAlphaColors = alphaColors.map((item) => item.replace(/\s/g, "").replace(/0\./g, "."));
  const tinycolorLightens = arr.map((_t, i) => {
    return tinycolor2(color).lighten(i * 5).toHexString();
  }).filter((item) => item !== "#ffffff");
  const tinycolorDarkens = arr.map((_t, i) => {
    return tinycolor2(color).darken(i * 5).toHexString();
  }).filter((item) => item !== "#000000");
  return [
    ...lightens,
    ...darkens,
    ...alphaColors,
    ...shortAlphaColors,
    ...tinycolorDarkens,
    ...tinycolorLightens
  ].filter((item) => !item.includes("-"));
}

// build/generate/generateModifyVars.ts
import { resolve } from "path";
import { generate as generate2 } from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/@ant-design+colors@7.1.0/node_modules/@ant-design/colors/lib/index.js";
import { theme } from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/ant-design-vue@4.2.3_vue@3.5.0_typescript@4.9.5_/node_modules/ant-design-vue/lib/index.js";
import convertLegacyToken from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/ant-design-vue@4.2.3_vue@3.5.0_typescript@4.9.5_/node_modules/ant-design-vue/lib/theme/convertLegacyToken.js";
var { defaultAlgorithm, defaultSeed } = theme;
function generateAntColors2(color, theme2 = "default") {
  return generate2(color, {
    theme: theme2
  });
}
function generateModifyVars() {
  const palettes = generateAntColors2(primaryColor);
  const primary = palettes[5];
  const primaryColorObj = {};
  for (let index = 0; index < 10; index++) {
    primaryColorObj[`primary-${index + 1}`] = palettes[index];
  }
  const mapToken = defaultAlgorithm(defaultSeed);
  const v3Token = convertLegacyToken(mapToken);
  return {
    ...v3Token,
    // ...modifyVars,
    // Used for global import to avoid the need to import each style file separately
    // reference:  Avoid repeated references
    hack: `true; @import (reference) "${resolve("src/design/config.less")}";`,
    "primary-color": primary,
    ...primaryColorObj,
    "info-color": primary,
    "processing-color": primary,
    "success-color": "#55D187",
    //  Success color
    "error-color": "#ED6F6F",
    //  False color
    "warning-color": "#EFBD47",
    //   Warning color
    //'border-color-base': '#EEEEEE',
    "font-size-base": "14px",
    //  Main font size
    "border-radius-base": "2px",
    //  Component/float fillet
    "link-color": primary,
    //   Link color
    "app-content-background": "#fafafa"
    //   Link color
  };
}

// build/utils.ts
import dotenv from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/dotenv@16.4.5/node_modules/dotenv/lib/main.js";
function wrapperEnv(envConf) {
  const ret = {};
  for (const envName of Object.keys(envConf)) {
    let realName = envConf[envName].replace(/\\n/g, "\n");
    realName = realName === "true" ? true : realName === "false" ? false : realName;
    if (envName === "VITE_PORT") {
      realName = Number(realName);
    }
    if (envName === "VITE_PROXY" && realName) {
      try {
        realName = JSON.parse(realName.replace(/'/g, '"'));
      } catch (error) {
        realName = "";
      }
    }
    ret[envName] = realName;
    if (typeof realName === "string") {
      process.env[envName] = realName;
    } else if (typeof realName === "object") {
      process.env[envName] = JSON.stringify(realName);
    }
  }
  return ret;
}

// build/vite/plugin/index.ts
import vue from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/@vitejs+plugin-vue@4.6.2_vite@5.4.3_@types+node@20.16.3_less@4.2.0_terser@5.31.6__vue@3.5.0_typescript@4.9.5_/node_modules/@vitejs/plugin-vue/dist/index.mjs";
import vueJsx from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/@vitejs+plugin-vue-jsx@3.1.0_vite@5.4.3_@types+node@20.16.3_less@4.2.0_terser@5.31.6__vue@3.5.0_typescript@4.9.5_/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs";
import purgeIcons from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/vite-plugin-purge-icons@0.10.0_vite@5.4.3_@types+node@20.16.3_less@4.2.0_terser@5.31.6_/node_modules/vite-plugin-purge-icons/dist/index.mjs";
import UnoCSS from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/unocss@0.58.9_postcss@8.4.44_rollup@4.21.2_vite@5.4.3_@types+node@20.16.3_less@4.2.0_terser@5.31.6_/node_modules/unocss/dist/vite.mjs";
import { presetTypography, presetUno } from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/unocss@0.58.9_postcss@8.4.44_rollup@4.21.2_vite@5.4.3_@types+node@20.16.3_less@4.2.0_terser@5.31.6_/node_modules/unocss/dist/index.mjs";
import AutoImport from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/unplugin-auto-import@0.18.6_@vueuse+core@10.11.1_vue@3.5.0_typescript@4.9.5___rollup@4.21.2/node_modules/unplugin-auto-import/dist/vite.js";
import VitePluginCertificate from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/vite-plugin-mkcert@1.17.6_vite@5.4.3_@types+node@20.16.3_less@4.2.0_terser@5.31.6_/node_modules/vite-plugin-mkcert/dist/mkcert.mjs";
import vueSetupExtend from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/vite-plugin-vue-setup-extend-plus@0.1.0/node_modules/vite-plugin-vue-setup-extend-plus/dist/index.js";

// build/vite/plugin/html.ts
import { createHtmlPlugin } from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/vite-plugin-html@3.2.2_vite@5.4.3_@types+node@20.16.3_less@4.2.0_terser@5.31.6_/node_modules/vite-plugin-html/dist/index.mjs";

// build/constant.ts
var GLOB_CONFIG_FILE_NAME = "_app.config.js";
var OUTPUT_DIR = "charge2";

// build/vite/plugin/html.ts
function configHtmlPlugin(env, isBuild) {
  const { VITE_GLOB_APP_TITLE, VITE_PUBLIC_PATH } = env;
  const path3 = VITE_PUBLIC_PATH.endsWith("/") ? VITE_PUBLIC_PATH : `${VITE_PUBLIC_PATH}/`;
  const getAppConfigSrc = () => {
    return `${path3 || "/"}${GLOB_CONFIG_FILE_NAME}?v=${package_default.version}-${(/* @__PURE__ */ new Date()).getTime()}`;
  };
  const htmlPlugin = createHtmlPlugin({
    minify: isBuild,
    inject: {
      // 修改模板html的标题
      data: {
        title: VITE_GLOB_APP_TITLE
      },
      // 将app.config.js文件注入到模板html中
      tags: isBuild ? [
        {
          tag: "script",
          attrs: {
            src: getAppConfigSrc()
          }
        }
      ] : []
    }
  });
  return htmlPlugin;
}

// build/vite/plugin/mock.ts
import { viteMockServe } from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/vite-plugin-mock@2.9.8_mockjs@1.1.0_vite@5.4.3_@types+node@20.16.3_less@4.2.0_terser@5.31.6_/node_modules/vite-plugin-mock/dist/index.js";
function configMockPlugin(isBuild) {
  return viteMockServe({
    ignore: /^\_/,
    mockPath: "mock",
    localEnabled: !isBuild,
    prodEnabled: isBuild,
    injectCode: `
      import { setupProdMockServer } from '../mock/_createProductionServer';

      setupProdMockServer();
      `
  });
}

// build/vite/plugin/compress.ts
import compressPlugin from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/vite-plugin-compression@0.5.1_vite@5.4.3_@types+node@20.16.3_less@4.2.0_terser@5.31.6_/node_modules/vite-plugin-compression/dist/index.mjs";
function configCompressPlugin(compress, deleteOriginFile = false) {
  const compressList = compress.split(",");
  const plugins = [];
  if (compressList.includes("gzip")) {
    plugins.push(
      compressPlugin({
        verbose: true,
        disable: false,
        threshold: 10240,
        algorithm: "gzip",
        ext: ".gz",
        deleteOriginFile
      })
    );
  }
  if (compressList.includes("brotli")) {
    plugins.push(
      compressPlugin({
        ext: ".br",
        algorithm: "brotliCompress",
        deleteOriginFile
      })
    );
  }
  return plugins;
}

// build/vite/plugin/visualizer.ts
import visualizer from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/rollup-plugin-visualizer@5.12.0_rollup@4.21.2/node_modules/rollup-plugin-visualizer/dist/plugin/index.js";
function configVisualizerConfig() {
  return visualizer({
    filename: "./node_modules/.cache/visualizer/stats.html",
    open: true,
    gzipSize: true,
    brotliSize: true
  });
  return [];
}

// build/vite/plugin/theme.ts
import path from "path";
import { viteThemePlugin, antdDarkThemePlugin, mixLighten, mixDarken, tinycolor } from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/@rys-fe+vite-plugin-theme@0.8.6_vite@5.4.3_@types+node@20.16.3_less@4.2.0_terser@5.31.6_/node_modules/@rys-fe/vite-plugin-theme/dist/index.js";
function configThemePlugin(isBuild) {
  const colors = generateColors({
    mixDarken,
    mixLighten,
    tinycolor
  });
  const vite_theme_plugin = viteThemePlugin({
    resolveSelector: (s) => {
      s = s.trim();
      switch (s) {
        case ".ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon":
          return ".ant-steps-item-icon > .ant-steps-icon";
        case ".ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)":
        case ".ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover":
        case ".ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active":
          return s;
        case ".ant-steps-item-icon > .ant-steps-icon":
          return s;
        case ".ant-select-item-option-selected:not(.ant-select-item-option-disabled)":
          return s;
        default:
          if (s.indexOf(".ant-btn") >= -1) {
            return s;
          }
      }
      return s.startsWith("[data-theme") ? s : `[data-theme] ${s}`;
    },
    colorVariables: [...getThemeColors(), ...colors]
  });
  vite_theme_plugin.forEach(function(item) {
    if ("vite:theme" === item.name) {
      if (isBuild) {
        delete item.enforce;
      }
    }
  });
  const plugin = [
    vite_theme_plugin,
    antdDarkThemePlugin({
      preloadFiles: [
        // path.resolve(process.cwd(), 'node_modules/ant-design-vue/dist/reset.css'),
        //path.resolve(process.cwd(), 'node_modules/ant-design-vue/dist/antd.dark.less'),
        path.resolve(process.cwd(), "src/design/index.less")
      ],
      filter: (id) => isBuild ? !id.endsWith("antd.less") : true,
      // extractCss: false,
      darkModifyVars: {
        ...generateModifyVars(true),
        "text-color": "#c9d1d9",
        "primary-1": "rgb(255 255 255 / 8%)",
        "text-color-base": "#c9d1d9",
        "component-background": "#151515",
        "heading-color": "rgb(255 255 255 / 65%)",
        // black: '#0e1117',
        // #8b949e
        "text-color-secondary": "#8b949e",
        "border-color-base": "#303030",
        "header-light-bottom-border-color": "#303030",
        // 'border-color-split': '#30363d',
        "item-active-bg": "#111b26",
        "app-content-background": "#1e1e1e",
        "tree-node-selected-bg": "#11263c",
        "alert-success-border-color": "#274916",
        "alert-success-bg-color": "#162312",
        "alert-success-icon-color": "#49aa19",
        "alert-info-border-color": "#153450",
        "alert-info-bg-color": "#111b26",
        "alert-info-icon-color": "#177ddc",
        "alert-warning-border-color": "#594214",
        "alert-warning-bg-color": "#2b2111",
        "alert-warning-icon-color": "#d89614",
        "alert-error-border-color": "#58181c",
        "alert-error-bg-color": "#2a1215",
        "alert-error-icon-color": "#a61d24"
      }
    })
  ];
  return plugin;
}

// build/vite/plugin/svgSprite.ts
import { createSvgIconsPlugin } from "file:///F:/%E4%BB%98%E9%A5%B6%E5%A4%A7%E5%B1%8F/JeecgBoot/jeecgboot-vue3/node_modules/.pnpm/vite-plugin-svg-icons@2.0.1_vite@5.4.3_@types+node@20.16.3_less@4.2.0_terser@5.31.6_/node_modules/vite-plugin-svg-icons/dist/index.mjs";
import path2 from "path";
function configSvgIconsPlugin(isBuild) {
  const svgIconsPlugin = createSvgIconsPlugin({
    iconDirs: [path2.resolve(process.cwd(), "src/assets/icons")],
    svgoOptions: isBuild,
    // default
    symbolId: "icon-[dir]-[name]"
  });
  return svgIconsPlugin;
}

// build/vite/plugin/index.ts
function createVitePlugins(viteEnv, isBuild) {
  const { VITE_USE_MOCK, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv;
  const vitePlugins = [
    // have to
    vue(),
    // have to
    vueJsx(),
    // support name
    vueSetupExtend(),
    // @ts-ignore
    VitePluginCertificate({
      source: "coding"
    })
  ];
  vitePlugins.push(AutoImport({
    imports: ["vue", "vue-router", "vue-i18n", "@vueuse/core", "pinia"]
  }));
  vitePlugins.push(UnoCSS({ presets: [presetUno(), presetTypography()] }));
  vitePlugins.push(configHtmlPlugin(viteEnv, isBuild));
  vitePlugins.push(configSvgIconsPlugin(isBuild));
  VITE_USE_MOCK && vitePlugins.push(configMockPlugin(isBuild));
  vitePlugins.push(purgeIcons());
  vitePlugins.push(configVisualizerConfig());
  vitePlugins.push(configThemePlugin(isBuild));
  if (isBuild) {
    vitePlugins.push(configCompressPlugin(VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE));
  }
  return vitePlugins;
}

// vite.config.ts
function pathResolve(dir) {
  return resolve2(process.cwd(), ".", dir);
}
var { dependencies, devDependencies, name, version } = package_default;
var __APP_INFO__ = {
  pkg: { dependencies, devDependencies, name, version },
  lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss")
};
var vite_config_default = ({ command, mode }) => {
  const root = process.cwd();
  const env = loadEnv(mode, root);
  const viteEnv = wrapperEnv(env);
  const { VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY } = viteEnv;
  const isBuild = command === "build";
  return {
    base: VITE_PUBLIC_PATH,
    lintOnSave: false,
    root,
    resolve: {
      alias: [
        {
          find: "vue-i18n",
          replacement: "vue-i18n/dist/vue-i18n.cjs.js"
        },
        // /@/xxxx => src/xxxx
        {
          find: /\/@\//,
          replacement: pathResolve("src") + "/"
        },
        // /#/xxxx => types/xxxx
        {
          find: /\/#\//,
          replacement: pathResolve("types") + "/"
        },
        {
          find: /@\//,
          replacement: pathResolve("src") + "/"
        },
        {
          find: /@\//,
          replacement: pathResolve("src") + "/"
        },
        // /#/xxxx => types/xxxx
        {
          find: /~@\//,
          replacement: pathResolve("types") + "/"
        }
      ]
    },
    server: {
      hmr: true,
      host: true,
      proxy: {
        "/jeecgboot": {
          // target: ' http://boot3.jeecg.com/jeecgboot',
          // target: 'http://101.43.94.70:25500/charge4gv2',
          target: "https://www.chargesystem.cn/charge4gv2",
          changeOrigin: true,
          ws: false,
          rewrite: (path3) => path3.replace(/^\/jeecgboot/, "")
        }
      }
    },
    build: {
      minify: "esbuild",
      target: "es2015",
      cssTarget: "chrome80",
      outDir: OUTPUT_DIR,
      rollupOptions: {
        // 关闭除屑优化，防止删除重要代码，导致打包后功能出现异常
        treeshake: false,
        output: {
          chunkFileNames: "js/[name]-[hash].js",
          // 引入文件名的名称
          entryFileNames: "js/[name]-[hash].js",
          // 包的入口文件名称
          // manualChunks配置 (依赖包从大到小排列)
          manualChunks: {
            // vue vue-router合并打包
            "vue-vendor": ["vue", "vue-router"],
            "antd-vue-vendor": ["ant-design-vue", "@ant-design/icons-vue", "@ant-design/colors"],
            "vxe-table-vendor": ["vxe-table", "vxe-table-plugin-antd", "xe-utils"],
            "emoji-mart-vue-fast": ["emoji-mart-vue-fast"],
            "china-area-data-vendor": ["china-area-data"]
          }
        }
      },
      // 关闭brotliSize显示可以稍微减少打包时间
      reportCompressedSize: false,
      // 提高超大静态资源警告大小
      chunkSizeWarningLimit: 2e3
    },
    esbuild: {
      //清除全局的console.log和debug
      drop: isBuild ? ["console", "debugger"] : []
    },
    define: {
      // setting vue-i18-next
      // Suppress warning
      __INTLIFY_PROD_DEVTOOLS__: false,
      __APP_INFO__: JSON.stringify(__APP_INFO__)
    },
    css: {
      preprocessorOptions: {
        less: {
          modifyVars: generateModifyVars(),
          javascriptEnabled: true
        }
      }
    },
    // The vite plugin used by the project. The quantity is large, so it is separately extracted and managed
    plugins: createVitePlugins(viteEnv, isBuild),
    // 预加载构建配置（首屏性能)
    optimizeDeps: {
      esbuildOptions: {
        target: "es2020"
      },
      exclude: [
        //升级vite4后，需要排除online依赖
        "@jeecg/online"
      ]
    }
  };
};
export {
  vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFja2FnZS5qc29uIiwgInZpdGUuY29uZmlnLnRzIiwgImJ1aWxkL2NvbmZpZy90aGVtZUNvbmZpZy50cyIsICJidWlsZC9nZW5lcmF0ZS9nZW5lcmF0ZU1vZGlmeVZhcnMudHMiLCAiYnVpbGQvdXRpbHMudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vaW5kZXgudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vaHRtbC50cyIsICJidWlsZC9jb25zdGFudC50cyIsICJidWlsZC92aXRlL3BsdWdpbi9tb2NrLnRzIiwgImJ1aWxkL3ZpdGUvcGx1Z2luL2NvbXByZXNzLnRzIiwgImJ1aWxkL3ZpdGUvcGx1Z2luL3Zpc3VhbGl6ZXIudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vdGhlbWUudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vc3ZnU3ByaXRlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ7XG4gIFwibmFtZVwiOiBcIlx1NTE0NVx1NzUzNVx1NUI4OVx1NTE2OFx1N0JBMVx1NzQwNlx1NUU3M1x1NTNGMFwiLFxuICBcInZlcnNpb25cIjogXCIzLjcuMFwiLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiXHU1MzE3XHU0RUFDXHU1NkZEXHU3MEFDXHU0RkUxXHU2MDZGXHU2MjgwXHU2NzJGXHU2NzA5XHU5NjUwXHU1MTZDXHU1M0Y4XCIsXG4gICAgXCJlbWFpbFwiOiBcImplZWNnb3NAMTYzLmNvbVwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly93d3cuamVlY2cuY29tXCJcbiAgfSxcbiAgXCJ0eXBlXCI6IFwibW9kdWxlXCIsXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJhbHBoYURlcGxveVwiOiBcIm5vZGUgLi9kZXBsb3kuanNcIixcbiAgICBcInBpbnN0YWxsXCI6IFwicG5wbSBpbnN0YWxsXCIsXG4gICAgXCJjbGVhbjpjYWNoZVwiOiBcInJpbXJhZiBub2RlX21vZHVsZXMvLmNhY2hlLyAmJiByaW1yYWYgbm9kZV9tb2R1bGVzLy52aXRlXCIsXG4gICAgXCJkZXZcIjogXCJjcm9zcy1lbnYgUkVQT1JUPXRydWUgIHZpdGVcIixcbiAgICBcImJ1aWxkXCI6IFwiY3Jvc3MtZW52IE5PREVfRU5WPXByb2R1Y3Rpb24gTk9ERV9PUFRJT05TPS0tbWF4LW9sZC1zcGFjZS1zaXplPTgxOTIgdml0ZSBidWlsZCAmJiBlc25vIC4vYnVpbGQvc2NyaXB0L3Bvc3RCdWlsZC50c1wiLFxuICAgIFwiYnVpbGQ6cmVwb3J0XCI6IFwicG5wbSBjbGVhbjpjYWNoZSAmJiBjcm9zcy1lbnYgUkVQT1JUPXRydWUgbnBtIHJ1biBidWlsZFwiLFxuICAgIFwicHJldmlld1wiOiBcIm5wbSBydW4gYnVpbGQgJiYgdml0ZSBwcmV2aWV3XCIsXG4gICAgXCJyZWluc3RhbGxcIjogXCJyaW1yYWYgcG5wbS1sb2NrLnlhbWwgJiYgcmltcmFmIHlhcm4ubG9jayAmJiByaW1yYWYgcGFja2FnZS5sb2NrLmpzb24gJiYgcmltcmFmIG5vZGVfbW9kdWxlcyAmJiBucG0gcnVuIGluc3RhbGxcIixcbiAgICBcImNsZWFuOmxpYlwiOiBcInJpbXJhZiBub2RlX21vZHVsZXNcIixcbiAgICBcImdlbjppY29uXCI6IFwiZXNubyAuL2J1aWxkL2dlbmVyYXRlL2ljb24vaW5kZXgudHNcIixcbiAgICBcImJhdGNoOnByZXR0aWVyXCI6IFwicHJldHRpZXIgLS13cml0ZSAgXFxcInNyYy8qKi8qLntqcyxqc29uLHRzeCxjc3MsbGVzcyxzY3NzLHZ1ZSxodG1sLG1kfVxcXCJcIixcbiAgICBcInVwZ3JhZGU6bG9nXCI6IFwiY29udmVudGlvbmFsLWNoYW5nZWxvZyAtcCBhbmd1bGFyIC1pIENIQU5HRUxPRy5tZCAtc1wiLFxuICAgIFwiaHVza3k6aW5zdGFsbFwiOiBcImh1c2t5IGluc3RhbGxcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAYW50LWRlc2lnbi9jb2xvcnNcIjogXCJeNy4wLjJcIixcbiAgICBcIkBhbnQtZGVzaWduL2ljb25zLXZ1ZVwiOiBcIl43LjAuMVwiLFxuICAgIFwiQGljb25pZnkvaWNvbmlmeVwiOiBcIl4zLjEuMVwiLFxuICAgIFwiQGplZWNnL29ubGluZVwiOiBcIjMuNy4wLWJldGFcIixcbiAgICBcIkB2dWUvc2hhcmVkXCI6IFwiXjMuNC4xOVwiLFxuICAgIFwiQHZ1ZXVzZS9jb3JlXCI6IFwiXjEwLjguMFwiLFxuICAgIFwiQHp4Y3Zibi10cy9jb3JlXCI6IFwiXjMuMC40XCIsXG4gICAgXCJhbnQtZGVzaWduLXZ1ZVwiOiBcIl40LjEuMlwiLFxuICAgIFwiYXhpb3NcIjogXCJeMS42LjdcIixcbiAgICBcImNoaW5hLWFyZWEtZGF0YVwiOiBcIl41LjAuMVwiLFxuICAgIFwiY2xpcGJvYXJkXCI6IFwiXjIuMC4xMVwiLFxuICAgIFwiY29kZW1pcnJvclwiOiBcIl41LjY1LjNcIixcbiAgICBcImNyb24tcGFyc2VyXCI6IFwiXjQuOS4wXCIsXG4gICAgXCJjcm9wcGVyanNcIjogXCJeMS42LjFcIixcbiAgICBcImNyeXB0by1qc1wiOiBcIl40LjIuMFwiLFxuICAgIFwiZGF5anNcIjogXCJeMS4xMS4xMFwiLFxuICAgIFwiZG9tLWFsaWduXCI6IFwiXjEuMTIuNFwiLFxuICAgIFwiZWNoYXJ0c1wiOiBcIl41LjQuM1wiLFxuICAgIFwiZWNoYXJ0cy1nbFwiOiBcIl4yLjAuOVwiLFxuICAgIFwiZW1vamktbWFydC12dWUtZmFzdFwiOiBcIl4xNS4wLjFcIixcbiAgICBcImVucXVpcmUuanNcIjogXCJeMi4xLjZcIixcbiAgICBcImludHJvLmpzXCI6IFwiXjcuMi4wXCIsXG4gICAgXCJsb2Rhc2gtZXNcIjogXCJeNC4xNy4yMVwiLFxuICAgIFwibG9kYXNoLmdldFwiOiBcIl40LjQuMlwiLFxuICAgIFwibWQ1XCI6IFwiXjIuMy4wXCIsXG4gICAgXCJtb2NranNcIjogXCJeMS4xLjBcIixcbiAgICBcIm5vZGUtc3NoXCI6IFwiXjEzLjIuMFwiLFxuICAgIFwibnByb2dyZXNzXCI6IFwiXjAuMi4wXCIsXG4gICAgXCJwYXRoLXRvLXJlZ2V4cFwiOiBcIl42LjIuMVwiLFxuICAgIFwicGluaWFcIjogXCIyLjEuN1wiLFxuICAgIFwicXJjb2RlXCI6IFwiXjEuNS4zXCIsXG4gICAgXCJxc1wiOiBcIl42LjExLjJcIixcbiAgICBcInJlc2l6ZS1vYnNlcnZlci1wb2x5ZmlsbFwiOiBcIl4xLjUuMVwiLFxuICAgIFwic29ydGFibGVqc1wiOiBcIl4xLjE1LjJcIixcbiAgICBcInZ1ZVwiOiBcIl4zLjQuMTlcIixcbiAgICBcInZ1ZS1jcm9wcGVyXCI6IFwiXjAuNi40XCIsXG4gICAgXCJ2dWUtY3JvcHBlcmpzXCI6IFwiXjUuMC4wXCIsXG4gICAgXCJ2dWUtaTE4blwiOiBcIl45LjkuMVwiLFxuICAgIFwidnVlLWluZmluaXRlLXNjcm9sbFwiOiBcIl4yLjAuMlwiLFxuICAgIFwidnVlLXJvdXRlclwiOiBcIl40LjMuMFwiLFxuICAgIFwidnVlLXR5cGVzXCI6IFwiXjUuMS4xXCIsXG4gICAgXCJ2dWVkcmFnZ2FibGVcIjogXCJeNC4xLjBcIixcbiAgICBcInZ4ZS10YWJsZVwiOiBcIjQuNi4xN1wiLFxuICAgIFwidnhlLXRhYmxlLXBsdWdpbi1hbnRkXCI6IFwiNC4wLjdcIixcbiAgICBcInhlLXV0aWxzXCI6IFwiMy41LjI2XCIsXG4gICAgXCJ4c3NcIjogXCJeMS4wLjE0XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGNvbW1pdGxpbnQvY2xpXCI6IFwiXjE4LjYuMVwiLFxuICAgIFwiQGNvbW1pdGxpbnQvY29uZmlnLWNvbnZlbnRpb25hbFwiOiBcIl4xOC42LjJcIixcbiAgICBcIkBpY29uaWZ5L2pzb25cIjogXCJeMi4yLjE4NVwiLFxuICAgIFwiQHB1cmdlLWljb25zL2dlbmVyYXRlZFwiOiBcIl4wLjEwLjBcIixcbiAgICBcIkByeXMtZmUvdml0ZS1wbHVnaW4tdGhlbWVcIjogXCJeMC44LjZcIixcbiAgICBcIkB0eXBlcy9jb2RlbWlycm9yXCI6IFwiXjUuNjAuMTVcIixcbiAgICBcIkB0eXBlcy9jcnlwdG8tanNcIjogXCJeNC4yLjJcIixcbiAgICBcIkB0eXBlcy9mcy1leHRyYVwiOiBcIl4xMS4wLjRcIixcbiAgICBcIkB0eXBlcy9pbnF1aXJlclwiOiBcIl45LjAuN1wiLFxuICAgIFwiQHR5cGVzL2ludHJvLmpzXCI6IFwiXjUuMS41XCIsXG4gICAgXCJAdHlwZXMvamVzdFwiOiBcIl4yOS41LjEyXCIsXG4gICAgXCJAdHlwZXMvbG9kYXNoLWVzXCI6IFwiXjQuMTcuMTJcIixcbiAgICBcIkB0eXBlcy9tb2NranNcIjogXCJeMS4wLjEwXCIsXG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yMC4xMS4xOVwiLFxuICAgIFwiQHR5cGVzL25wcm9ncmVzc1wiOiBcIl4wLjIuM1wiLFxuICAgIFwiQHR5cGVzL3FyY29kZVwiOiBcIl4xLjUuNVwiLFxuICAgIFwiQHR5cGVzL3FzXCI6IFwiXjYuOS4xMVwiLFxuICAgIFwiQHR5cGVzL3NvcnRhYmxlanNcIjogXCJeMS4xNS44XCIsXG4gICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpblwiOiBcIl42LjE3LjBcIixcbiAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJcIjogXCJeNi4xNy4wXCIsXG4gICAgXCJAdml0ZWpzL3BsdWdpbi12dWVcIjogXCJeNC4zLjNcIixcbiAgICBcIkB2aXRlanMvcGx1Z2luLXZ1ZS1qc3hcIjogXCJeMy4xLjBcIixcbiAgICBcIkB2dWUvY29tcGlsZXItc2ZjXCI6IFwiXjMuNC40XCIsXG4gICAgXCJAdnVlL3Rlc3QtdXRpbHNcIjogXCJeMi40LjRcIixcbiAgICBcImF1dG9wcmVmaXhlclwiOiBcIl4xMC40LjE3XCIsXG4gICAgXCJjb21taXRpemVuXCI6IFwiXjQuMy4wXCIsXG4gICAgXCJjb252ZW50aW9uYWwtY2hhbmdlbG9nLWNsaVwiOiBcIl40LjEuMFwiLFxuICAgIFwiY3Jvc3MtZW52XCI6IFwiXjcuMC4zXCIsXG4gICAgXCJjei1naXRcIjogXCJeMS44LjBcIixcbiAgICBcImN6Z1wiOiBcIl4xLjguMFwiLFxuICAgIFwiZG90ZW52XCI6IFwiXjE2LjMuMVwiLFxuICAgIFwiZXNsaW50XCI6IFwiXjguNTYuMFwiLFxuICAgIFwiZXNsaW50LWNvbmZpZy1wcmV0dGllclwiOiBcIl45LjEuMFwiLFxuICAgIFwiZXNsaW50LWRlZmluZS1jb25maWdcIjogXCJeMi4xLjBcIixcbiAgICBcImVzbGludC1wbHVnaW4tamVzdFwiOiBcIl4yNy45LjBcIixcbiAgICBcImVzbGludC1wbHVnaW4tcHJldHRpZXJcIjogXCJeNS4xLjNcIixcbiAgICBcImVzbGludC1wbHVnaW4tdnVlXCI6IFwiXjkuMjEuMVwiLFxuICAgIFwiZXNub1wiOiBcIl40LjAuMFwiLFxuICAgIFwiZnMtZXh0cmFcIjogXCJeMTEuMi4wXCIsXG4gICAgXCJodHRwLXNlcnZlclwiOiBcIl4xNC4xLjFcIixcbiAgICBcImh1c2t5XCI6IFwiXjguMC4zXCIsXG4gICAgXCJpbnF1aXJlclwiOiBcIl45LjIuMTVcIixcbiAgICBcImlzLWNpXCI6IFwiXjMuMC4xXCIsXG4gICAgXCJqZXN0XCI6IFwiXjI5LjcuMFwiLFxuICAgIFwibGVzc1wiOiBcIl40LjIuMFwiLFxuICAgIFwibGludC1zdGFnZWRcIjogXCIxNS4yLjJcIixcbiAgICBcIm5wbS1ydW4tYWxsXCI6IFwiXjQuMS41XCIsXG4gICAgXCJwaWNvY29sb3JzXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJwb3N0Y3NzXCI6IFwiXjguNC4zNVwiLFxuICAgIFwicG9zdGNzcy1odG1sXCI6IFwiXjEuNi4wXCIsXG4gICAgXCJwb3N0Y3NzLWxlc3NcIjogXCJeNi4wLjBcIixcbiAgICBcInByZXR0aWVyXCI6IFwiXjMuMi41XCIsXG4gICAgXCJwcmV0dHktcXVpY2tcIjogXCJeNC4wLjBcIixcbiAgICBcInJpbXJhZlwiOiBcIl41LjAuNVwiLFxuICAgIFwicm9sbHVwXCI6IFwiXjQuMTIuMFwiLFxuICAgIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI6IFwiXjUuMTIuMFwiLFxuICAgIFwic3R5bGVsaW50XCI6IFwiXjE2LjIuMVwiLFxuICAgIFwic3R5bGVsaW50LWNvbmZpZy1wcmV0dGllclwiOiBcIl45LjAuNVwiLFxuICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNvbW1lbmRlZFwiOiBcIl4xNC4wLjBcIixcbiAgICBcInN0eWxlbGludC1jb25maWctcmVjb21tZW5kZWQtdnVlXCI6IFwiXjEuNS4wXCIsXG4gICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkXCI6IFwiXjM2LjAuMFwiLFxuICAgIFwic3R5bGVsaW50LW9yZGVyXCI6IFwiXjYuMC40XCIsXG4gICAgXCJ0cy1qZXN0XCI6IFwiXjI5LjEuMlwiLFxuICAgIFwidHMtbm9kZVwiOiBcIl4xMC45LjJcIixcbiAgICBcInR5cGVzY3JpcHRcIjogXCJeNC45LjVcIixcbiAgICBcInVub2Nzc1wiOiBcIl4wLjU4LjVcIixcbiAgICBcInVucGx1Z2luLWF1dG8taW1wb3J0XCI6IFwiXjAuMTguNlwiLFxuICAgIFwidml0ZVwiOiBcIl41LjIuMTFcIixcbiAgICBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI6IFwiXjAuNS4xXCIsXG4gICAgXCJ2aXRlLXBsdWdpbi1odG1sXCI6IFwiXjMuMi4yXCIsXG4gICAgXCJ2aXRlLXBsdWdpbi1ta2NlcnRcIjogXCJeMS4xNy4zXCIsXG4gICAgXCJ2aXRlLXBsdWdpbi1tb2NrXCI6IFwiXjIuOS42XCIsXG4gICAgXCJ2aXRlLXBsdWdpbi1vcHRpbWl6ZS1wZXJzaXN0XCI6IFwiXjAuMS4yXCIsXG4gICAgXCJ2aXRlLXBsdWdpbi1wYWNrYWdlLWNvbmZpZ1wiOiBcIl4wLjEuMVwiLFxuICAgIFwidml0ZS1wbHVnaW4tcHVyZ2UtaWNvbnNcIjogXCJeMC4xMC4wXCIsXG4gICAgXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjogXCJeMi4wLjFcIixcbiAgICBcInZpdGUtcGx1Z2luLXZ1ZS1zZXR1cC1leHRlbmQtcGx1c1wiOiBcIl4wLjEuMFwiLFxuICAgIFwidnVlLWVzbGludC1wYXJzZXJcIjogXCJeOS40LjJcIixcbiAgICBcInZ1ZS10c2NcIjogXCJeMS44LjI3XCJcbiAgfSxcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vamVlY2dib290L0plZWNnQm9vdC5naXRcIlxuICB9LFxuICBcImxpY2Vuc2VcIjogXCJNSVRcIixcbiAgXCJidWdzXCI6IHtcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9qZWVjZ2Jvb3QvSmVlY2dCb290L2lzc3Vlc1wiXG4gIH0sXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwczovL3d3dy5qZWVjZy5jb21cIixcbiAgXCJlbmdpbmVzXCI6IHtcbiAgICBcIm5vZGVcIjogXCJeMTIgfHwgPj0xNFwiXG4gIH1cbn1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRjpcXFxcXHU0RUQ4XHU5OTc2XHU1OTI3XHU1QzRGXFxcXEplZWNnQm9vdFxcXFxqZWVjZ2Jvb3QtdnVlM1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRjpcXFxcXHU0RUQ4XHU5OTc2XHU1OTI3XHU1QzRGXFxcXEplZWNnQm9vdFxcXFxqZWVjZ2Jvb3QtdnVlM1xcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRjovJUU0JUJCJTk4JUU5JUE1JUI2JUU1JUE0JUE3JUU1JUIxJThGL0plZWNnQm9vdC9qZWVjZ2Jvb3QtdnVlMy92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB0eXBlIHsgVXNlckNvbmZpZywgQ29uZmlnRW52IH0gZnJvbSAndml0ZSc7XHJcbmltcG9ydCBwa2cgZnJvbSAnLi9wYWNrYWdlLmpzb24nO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgeyBsb2FkRW52IH0gZnJvbSAndml0ZSc7XHJcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVNb2RpZnlWYXJzIH0gZnJvbSAnLi9idWlsZC9nZW5lcmF0ZS9nZW5lcmF0ZU1vZGlmeVZhcnMnO1xyXG5pbXBvcnQgeyBjcmVhdGVQcm94eSB9IGZyb20gJy4vYnVpbGQvdml0ZS9wcm94eSc7XHJcbmltcG9ydCB7IHdyYXBwZXJFbnYgfSBmcm9tICcuL2J1aWxkL3V0aWxzJztcclxuaW1wb3J0IHsgY3JlYXRlVml0ZVBsdWdpbnMgfSBmcm9tICcuL2J1aWxkL3ZpdGUvcGx1Z2luJztcclxuaW1wb3J0IHsgT1VUUFVUX0RJUiB9IGZyb20gJy4vYnVpbGQvY29uc3RhbnQnO1xyXG5cclxuZnVuY3Rpb24gcGF0aFJlc29sdmUoZGlyOiBzdHJpbmcpIHtcclxuXHRyZXR1cm4gcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLicsIGRpcik7XHJcbn1cclxuXHJcbmNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSA9IHBrZztcclxuY29uc3QgX19BUFBfSU5GT19fID0ge1xyXG5cdHBrZzogeyBkZXBlbmRlbmNpZXMsIGRldkRlcGVuZGVuY2llcywgbmFtZSwgdmVyc2lvbiB9LFxyXG5cdGxhc3RCdWlsZFRpbWU6IGRheWpzKCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyksXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCAoeyBjb21tYW5kLCBtb2RlIH06IENvbmZpZ0Vudik6IFVzZXJDb25maWcgPT4ge1xyXG5cdGNvbnN0IHJvb3QgPSBwcm9jZXNzLmN3ZCgpO1xyXG5cclxuXHRjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xyXG5cclxuXHQvLyBUaGUgYm9vbGVhbiB0eXBlIHJlYWQgYnkgbG9hZEVudiBpcyBhIHN0cmluZy4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY29udmVydGVkIHRvIGJvb2xlYW4gdHlwZVxyXG5cdGNvbnN0IHZpdGVFbnYgPSB3cmFwcGVyRW52KGVudik7XHJcblxyXG5cdGNvbnN0IHsgVklURV9QT1JULCBWSVRFX1BVQkxJQ19QQVRILCBWSVRFX1BST1hZIH0gPSB2aXRlRW52O1xyXG5cclxuXHRjb25zdCBpc0J1aWxkID0gY29tbWFuZCA9PT0gJ2J1aWxkJztcclxuXHJcblx0cmV0dXJuIHtcclxuXHRcdGJhc2U6IFZJVEVfUFVCTElDX1BBVEgsXHJcblx0XHRsaW50T25TYXZlOiBmYWxzZSxcclxuXHRcdHJvb3QsXHJcblx0XHRyZXNvbHZlOiB7XHJcblx0XHRcdGFsaWFzOiBbXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0ZmluZDogJ3Z1ZS1pMThuJyxcclxuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiAndnVlLWkxOG4vZGlzdC92dWUtaTE4bi5janMuanMnLFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0Ly8gL0AveHh4eCA9PiBzcmMveHh4eFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGZpbmQ6IC9cXC9AXFwvLyxcclxuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBwYXRoUmVzb2x2ZSgnc3JjJykgKyAnLycsXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvLyAvIy94eHh4ID0+IHR5cGVzL3h4eHhcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRmaW5kOiAvXFwvI1xcLy8sXHJcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogcGF0aFJlc29sdmUoJ3R5cGVzJykgKyAnLycsXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRmaW5kOiAvQFxcLy8sXHJcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogcGF0aFJlc29sdmUoJ3NyYycpICsgJy8nLFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0ZmluZDogL0BcXC8vLFxyXG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHBhdGhSZXNvbHZlKCdzcmMnKSArICcvJyxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8vIC8jL3h4eHggPT4gdHlwZXMveHh4eFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGZpbmQ6IC9+QFxcLy8sXHJcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogcGF0aFJlc29sdmUoJ3R5cGVzJykgKyAnLycsXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XSxcclxuXHRcdH0sXHJcblx0XHRzZXJ2ZXI6IHtcclxuXHRcdFx0aG1yOiB0cnVlLFxyXG5cdFx0XHRob3N0OiB0cnVlLFxyXG5cdFx0XHRwcm94eToge1xyXG5cdFx0XHRcdCcvamVlY2dib290Jzoge1xyXG5cdFx0XHRcdFx0Ly8gdGFyZ2V0OiAnIGh0dHA6Ly9ib290My5qZWVjZy5jb20vamVlY2dib290JyxcclxuXHRcdFx0XHRcdC8vIHRhcmdldDogJ2h0dHA6Ly8xMDEuNDMuOTQuNzA6MjU1MDAvY2hhcmdlNGd2MicsXHJcblx0XHRcdFx0XHR0YXJnZXQ6ICdodHRwczovL3d3dy5jaGFyZ2VzeXN0ZW0uY24vY2hhcmdlNGd2MicsXHJcblx0XHRcdFx0XHRjaGFuZ2VPcmlnaW46IHRydWUsXHJcblx0XHRcdFx0XHR3czogZmFsc2UsXHJcblx0XHRcdFx0XHRyZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKC9eXFwvamVlY2dib290LywgJycpLFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdH0sXHJcblx0XHR9LFxyXG5cdFx0YnVpbGQ6IHtcclxuXHRcdFx0bWluaWZ5OiAnZXNidWlsZCcsXHJcblx0XHRcdHRhcmdldDogJ2VzMjAxNScsXHJcblx0XHRcdGNzc1RhcmdldDogJ2Nocm9tZTgwJyxcclxuXHRcdFx0b3V0RGlyOiBPVVRQVVRfRElSLFxyXG5cdFx0XHRyb2xsdXBPcHRpb25zOiB7XHJcblx0XHRcdFx0Ly8gXHU1MTczXHU5NUVEXHU5NjY0XHU1QzUxXHU0RjE4XHU1MzE2XHVGRjBDXHU5NjMyXHU2QjYyXHU1MjIwXHU5NjY0XHU5MUNEXHU4OTgxXHU0RUUzXHU3ODAxXHVGRjBDXHU1QkZDXHU4MUY0XHU2MjUzXHU1MzA1XHU1NDBFXHU1MjlGXHU4MEZEXHU1MUZBXHU3M0IwXHU1RjAyXHU1RTM4XHJcblx0XHRcdFx0dHJlZXNoYWtlOiBmYWxzZSxcclxuXHRcdFx0XHRvdXRwdXQ6IHtcclxuXHRcdFx0XHRcdGNodW5rRmlsZU5hbWVzOiAnanMvW25hbWVdLVtoYXNoXS5qcycsIC8vIFx1NUYxNVx1NTE2NVx1NjU4N1x1NEVGNlx1NTQwRFx1NzY4NFx1NTQwRFx1NzlGMFxyXG5cdFx0XHRcdFx0ZW50cnlGaWxlTmFtZXM6ICdqcy9bbmFtZV0tW2hhc2hdLmpzJywgLy8gXHU1MzA1XHU3Njg0XHU1MTY1XHU1M0UzXHU2NTg3XHU0RUY2XHU1NDBEXHU3OUYwXHJcblx0XHRcdFx0XHQvLyBtYW51YWxDaHVua3NcdTkxNERcdTdGNkUgKFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NEVDRVx1NTkyN1x1NTIzMFx1NUMwRlx1NjM5Mlx1NTIxNylcclxuXHRcdFx0XHRcdG1hbnVhbENodW5rczoge1xyXG5cdFx0XHRcdFx0XHQvLyB2dWUgdnVlLXJvdXRlclx1NTQwOFx1NUU3Nlx1NjI1M1x1NTMwNVxyXG5cdFx0XHRcdFx0XHQndnVlLXZlbmRvcic6IFsndnVlJywgJ3Z1ZS1yb3V0ZXInXSxcclxuXHRcdFx0XHRcdFx0J2FudGQtdnVlLXZlbmRvcic6IFsnYW50LWRlc2lnbi12dWUnLCAnQGFudC1kZXNpZ24vaWNvbnMtdnVlJywgJ0BhbnQtZGVzaWduL2NvbG9ycyddLFxyXG5cdFx0XHRcdFx0XHQndnhlLXRhYmxlLXZlbmRvcic6IFsndnhlLXRhYmxlJywgJ3Z4ZS10YWJsZS1wbHVnaW4tYW50ZCcsICd4ZS11dGlscyddLFxyXG5cdFx0XHRcdFx0XHQnZW1vamktbWFydC12dWUtZmFzdCc6IFsnZW1vamktbWFydC12dWUtZmFzdCddLFxyXG5cdFx0XHRcdFx0XHQnY2hpbmEtYXJlYS1kYXRhLXZlbmRvcic6IFsnY2hpbmEtYXJlYS1kYXRhJ10sXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIFx1NTE3M1x1OTVFRGJyb3RsaVNpemVcdTY2M0VcdTc5M0FcdTUzRUZcdTRFRTVcdTdBMERcdTVGQUVcdTUxQ0ZcdTVDMTFcdTYyNTNcdTUzMDVcdTY1RjZcdTk1RjRcclxuXHRcdFx0cmVwb3J0Q29tcHJlc3NlZFNpemU6IGZhbHNlLFxyXG5cdFx0XHQvLyBcdTYzRDBcdTlBRDhcdThEODVcdTU5MjdcdTk3NTlcdTYwMDFcdThENDRcdTZFOTBcdThCNjZcdTU0NEFcdTU5MjdcdTVDMEZcclxuXHRcdFx0Y2h1bmtTaXplV2FybmluZ0xpbWl0OiAyMDAwLFxyXG5cdFx0fSxcclxuXHRcdGVzYnVpbGQ6IHtcclxuXHRcdFx0Ly9cdTZFMDVcdTk2NjRcdTUxNjhcdTVDNDBcdTc2ODRjb25zb2xlLmxvZ1x1NTQ4Q2RlYnVnXHJcblx0XHRcdGRyb3A6IGlzQnVpbGQgPyBbJ2NvbnNvbGUnLCAnZGVidWdnZXInXSA6IFtdLFxyXG5cdFx0fSxcclxuXHRcdGRlZmluZToge1xyXG5cdFx0XHQvLyBzZXR0aW5nIHZ1ZS1pMTgtbmV4dFxyXG5cdFx0XHQvLyBTdXBwcmVzcyB3YXJuaW5nXHJcblx0XHRcdF9fSU5UTElGWV9QUk9EX0RFVlRPT0xTX186IGZhbHNlLFxyXG5cdFx0XHRfX0FQUF9JTkZPX186IEpTT04uc3RyaW5naWZ5KF9fQVBQX0lORk9fXyksXHJcblx0XHR9LFxyXG5cdFx0Y3NzOiB7XHJcblx0XHRcdHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcclxuXHRcdFx0XHRsZXNzOiB7XHJcblx0XHRcdFx0XHRtb2RpZnlWYXJzOiBnZW5lcmF0ZU1vZGlmeVZhcnMoKSxcclxuXHRcdFx0XHRcdGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdH0sXHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIFRoZSB2aXRlIHBsdWdpbiB1c2VkIGJ5IHRoZSBwcm9qZWN0LiBUaGUgcXVhbnRpdHkgaXMgbGFyZ2UsIHNvIGl0IGlzIHNlcGFyYXRlbHkgZXh0cmFjdGVkIGFuZCBtYW5hZ2VkXHJcblx0XHRwbHVnaW5zOiBjcmVhdGVWaXRlUGx1Z2lucyh2aXRlRW52LCBpc0J1aWxkKSxcclxuXHRcdC8vIFx1OTg4NFx1NTJBMFx1OEY3RFx1Njc4NFx1NUVGQVx1OTE0RFx1N0Y2RVx1RkYwOFx1OTk5Nlx1NUM0Rlx1NjAyN1x1ODBGRClcclxuXHRcdG9wdGltaXplRGVwczoge1xyXG5cdFx0XHRlc2J1aWxkT3B0aW9uczoge1xyXG5cdFx0XHRcdHRhcmdldDogJ2VzMjAyMCcsXHJcblx0XHRcdH0sXHJcblx0XHRcdGV4Y2x1ZGU6IFtcclxuXHRcdFx0XHQvL1x1NTM0N1x1N0VBN3ZpdGU0XHU1NDBFXHVGRjBDXHU5NzAwXHU4OTgxXHU2MzkyXHU5NjY0b25saW5lXHU0RjlEXHU4RDU2XHJcblx0XHRcdFx0J0BqZWVjZy9vbmxpbmUnLFxyXG5cdFx0XHRdLFxyXG5cdFx0fSxcclxuXHR9O1xyXG59O1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkY6XFxcXFx1NEVEOFx1OTk3Nlx1NTkyN1x1NUM0RlxcXFxKZWVjZ0Jvb3RcXFxcamVlY2dib290LXZ1ZTNcXFxcYnVpbGRcXFxcY29uZmlnXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJGOlxcXFxcdTRFRDhcdTk5NzZcdTU5MjdcdTVDNEZcXFxcSmVlY2dCb290XFxcXGplZWNnYm9vdC12dWUzXFxcXGJ1aWxkXFxcXGNvbmZpZ1xcXFx0aGVtZUNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRjovJUU0JUJCJTk4JUU5JUE1JUI2JUU1JUE0JUE3JUU1JUIxJThGL0plZWNnQm9vdC9qZWVjZ2Jvb3QtdnVlMy9idWlsZC9jb25maWcvdGhlbWVDb25maWcudHNcIjtpbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJ0BhbnQtZGVzaWduL2NvbG9ycyc7XHJcblxyXG5leHBvcnQgY29uc3QgcHJpbWFyeUNvbG9yID0gJyMxODkwRkYnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGRhcmtNb2RlID0gJ2xpZ2h0JztcclxuXHJcbnR5cGUgRm4gPSAoLi4uYXJnOiBhbnkpID0+IGFueTtcclxuXHJcbnR5cGUgR2VuZXJhdGVUaGVtZSA9ICdkZWZhdWx0JyB8ICdkYXJrJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVDb2xvcnNQYXJhbXMge1xyXG4gIG1peExpZ2h0ZW46IEZuO1xyXG4gIG1peERhcmtlbjogRm47XHJcbiAgdGlueWNvbG9yOiBhbnk7XHJcbiAgY29sb3I/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFudENvbG9ycyhjb2xvcjogc3RyaW5nLCB0aGVtZTogR2VuZXJhdGVUaGVtZSA9ICdkZWZhdWx0Jykge1xyXG4gIHJldHVybiBnZW5lcmF0ZShjb2xvciwge1xyXG4gICAgdGhlbWUsXHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUaGVtZUNvbG9ycyhjb2xvcj86IHN0cmluZykge1xyXG4gIGNvbnN0IHRjID0gY29sb3IgfHwgcHJpbWFyeUNvbG9yO1xyXG4gIGNvbnN0IGxpZ2h0Q29sb3JzID0gZ2VuZXJhdGVBbnRDb2xvcnModGMpO1xyXG4gIGNvbnN0IHByaW1hcnkgPSBsaWdodENvbG9yc1s1XTtcclxuICBjb25zdCBtb2RlQ29sb3JzID0gZ2VuZXJhdGVBbnRDb2xvcnMocHJpbWFyeSwgJ2RhcmsnKTtcclxuXHJcbiAgcmV0dXJuIFsuLi5saWdodENvbG9ycywgLi4ubW9kZUNvbG9yc107XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNvbG9ycyh7XHJcbiAgY29sb3IgPSBwcmltYXJ5Q29sb3IsXHJcbiAgbWl4TGlnaHRlbixcclxuICBtaXhEYXJrZW4sXHJcbiAgdGlueWNvbG9yLFxyXG59OiBHZW5lcmF0ZUNvbG9yc1BhcmFtcykge1xyXG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheSgxOSkuZmlsbCgwKTtcclxuICBjb25zdCBsaWdodGVucyA9IGFyci5tYXAoKF90LCBpKSA9PiB7XHJcbiAgICByZXR1cm4gbWl4TGlnaHRlbihjb2xvciwgaSAvIDUpO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBkYXJrZW5zID0gYXJyLm1hcCgoX3QsIGkpID0+IHtcclxuICAgIHJldHVybiBtaXhEYXJrZW4oY29sb3IsIGkgLyA1KTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgYWxwaGFDb2xvcnMgPSBhcnIubWFwKChfdCwgaSkgPT4ge1xyXG4gICAgcmV0dXJuIHRpbnljb2xvcihjb2xvcilcclxuICAgICAgLnNldEFscGhhKGkgLyAyMClcclxuICAgICAgLnRvUmdiU3RyaW5nKCk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHNob3J0QWxwaGFDb2xvcnMgPSBhbHBoYUNvbG9ycy5tYXAoKGl0ZW0pID0+IGl0ZW0ucmVwbGFjZSgvXFxzL2csICcnKS5yZXBsYWNlKC8wXFwuL2csICcuJykpO1xyXG5cclxuICBjb25zdCB0aW55Y29sb3JMaWdodGVucyA9IGFyclxyXG4gICAgLm1hcCgoX3QsIGkpID0+IHtcclxuICAgICAgcmV0dXJuIHRpbnljb2xvcihjb2xvcilcclxuICAgICAgICAubGlnaHRlbihpICogNSlcclxuICAgICAgICAudG9IZXhTdHJpbmcoKTtcclxuICAgIH0pXHJcbiAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSAnI2ZmZmZmZicpO1xyXG5cclxuICBjb25zdCB0aW55Y29sb3JEYXJrZW5zID0gYXJyXHJcbiAgICAubWFwKChfdCwgaSkgPT4ge1xyXG4gICAgICByZXR1cm4gdGlueWNvbG9yKGNvbG9yKVxyXG4gICAgICAgIC5kYXJrZW4oaSAqIDUpXHJcbiAgICAgICAgLnRvSGV4U3RyaW5nKCk7XHJcbiAgICB9KVxyXG4gICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gJyMwMDAwMDAnKTtcclxuICByZXR1cm4gW1xyXG4gICAgLi4ubGlnaHRlbnMsXHJcbiAgICAuLi5kYXJrZW5zLFxyXG4gICAgLi4uYWxwaGFDb2xvcnMsXHJcbiAgICAuLi5zaG9ydEFscGhhQ29sb3JzLFxyXG4gICAgLi4udGlueWNvbG9yRGFya2VucyxcclxuICAgIC4uLnRpbnljb2xvckxpZ2h0ZW5zLFxyXG4gIF0uZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5pbmNsdWRlcygnLScpKTtcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkY6XFxcXFx1NEVEOFx1OTk3Nlx1NTkyN1x1NUM0RlxcXFxKZWVjZ0Jvb3RcXFxcamVlY2dib290LXZ1ZTNcXFxcYnVpbGRcXFxcZ2VuZXJhdGVcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkY6XFxcXFx1NEVEOFx1OTk3Nlx1NTkyN1x1NUM0RlxcXFxKZWVjZ0Jvb3RcXFxcamVlY2dib290LXZ1ZTNcXFxcYnVpbGRcXFxcZ2VuZXJhdGVcXFxcZ2VuZXJhdGVNb2RpZnlWYXJzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9GOi8lRTQlQkIlOTglRTklQTUlQjYlRTUlQTQlQTclRTUlQjElOEYvSmVlY2dCb290L2plZWNnYm9vdC12dWUzL2J1aWxkL2dlbmVyYXRlL2dlbmVyYXRlTW9kaWZ5VmFycy50c1wiO2ltcG9ydCB7IHByaW1hcnlDb2xvciB9IGZyb20gJy4uL2NvbmZpZy90aGVtZUNvbmZpZyc7XHJcbi8vIGltcG9ydCB7IGdldFRoZW1lVmFyaWFibGVzIH0gZnJvbSAnYW50LWRlc2lnbi12dWUvZGlzdC90aGVtZSc7XHJcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcclxuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICdAYW50LWRlc2lnbi9jb2xvcnMnO1xyXG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJ2FudC1kZXNpZ24tdnVlL2xpYic7XHJcbmltcG9ydCBjb252ZXJ0TGVnYWN5VG9rZW4gZnJvbSAnYW50LWRlc2lnbi12dWUvbGliL3RoZW1lL2NvbnZlcnRMZWdhY3lUb2tlbic7XHJcbmNvbnN0IHsgZGVmYXVsdEFsZ29yaXRobSwgZGVmYXVsdFNlZWQgfSA9IHRoZW1lO1xyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVBbnRDb2xvcnMoY29sb3I6IHN0cmluZywgdGhlbWU6ICdkZWZhdWx0JyB8ICdkYXJrJyA9ICdkZWZhdWx0Jykge1xyXG4gIHJldHVybiBnZW5lcmF0ZShjb2xvciwge1xyXG4gICAgdGhlbWUsXHJcbiAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBsZXNzIGdsb2JhbCB2YXJpYWJsZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTW9kaWZ5VmFycygpIHtcclxuICBjb25zdCBwYWxldHRlcyA9IGdlbmVyYXRlQW50Q29sb3JzKHByaW1hcnlDb2xvcik7XHJcbiAgY29uc3QgcHJpbWFyeSA9IHBhbGV0dGVzWzVdO1xyXG5cclxuICBjb25zdCBwcmltYXJ5Q29sb3JPYmo6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuXHJcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDEwOyBpbmRleCsrKSB7XHJcbiAgICBwcmltYXJ5Q29sb3JPYmpbYHByaW1hcnktJHtpbmRleCArIDF9YF0gPSBwYWxldHRlc1tpbmRleF07XHJcbiAgfVxyXG5cclxuICBjb25zdCBtYXBUb2tlbiA9IGRlZmF1bHRBbGdvcml0aG0oZGVmYXVsdFNlZWQpO1xyXG4gIGNvbnN0IHYzVG9rZW4gPSBjb252ZXJ0TGVnYWN5VG9rZW4obWFwVG9rZW4pO1xyXG4gIHJldHVybiB7XHJcbiAgICAuLi52M1Rva2VuLFxyXG4gICAgLy8gLi4ubW9kaWZ5VmFycyxcclxuICAgIC8vIFVzZWQgZm9yIGdsb2JhbCBpbXBvcnQgdG8gYXZvaWQgdGhlIG5lZWQgdG8gaW1wb3J0IGVhY2ggc3R5bGUgZmlsZSBzZXBhcmF0ZWx5XHJcbiAgICAvLyByZWZlcmVuY2U6ICBBdm9pZCByZXBlYXRlZCByZWZlcmVuY2VzXHJcbiAgICBoYWNrOiBgdHJ1ZTsgQGltcG9ydCAocmVmZXJlbmNlKSBcIiR7cmVzb2x2ZSgnc3JjL2Rlc2lnbi9jb25maWcubGVzcycpfVwiO2AsXHJcbiAgICAncHJpbWFyeS1jb2xvcic6IHByaW1hcnksXHJcbiAgICAuLi5wcmltYXJ5Q29sb3JPYmosXHJcbiAgICAnaW5mby1jb2xvcic6IHByaW1hcnksXHJcbiAgICAncHJvY2Vzc2luZy1jb2xvcic6IHByaW1hcnksXHJcbiAgICAnc3VjY2Vzcy1jb2xvcic6ICcjNTVEMTg3JywgLy8gIFN1Y2Nlc3MgY29sb3JcclxuICAgICdlcnJvci1jb2xvcic6ICcjRUQ2RjZGJywgLy8gIEZhbHNlIGNvbG9yXHJcbiAgICAnd2FybmluZy1jb2xvcic6ICcjRUZCRDQ3JywgLy8gICBXYXJuaW5nIGNvbG9yXHJcbiAgICAvLydib3JkZXItY29sb3ItYmFzZSc6ICcjRUVFRUVFJyxcclxuICAgICdmb250LXNpemUtYmFzZSc6ICcxNHB4JywgLy8gIE1haW4gZm9udCBzaXplXHJcbiAgICAnYm9yZGVyLXJhZGl1cy1iYXNlJzogJzJweCcsIC8vICBDb21wb25lbnQvZmxvYXQgZmlsbGV0XHJcbiAgICAnbGluay1jb2xvcic6IHByaW1hcnksIC8vICAgTGluayBjb2xvclxyXG4gICAgJ2FwcC1jb250ZW50LWJhY2tncm91bmQnOiAnI2ZhZmFmYScsIC8vICAgTGluayBjb2xvclxyXG4gIH07XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJGOlxcXFxcdTRFRDhcdTk5NzZcdTU5MjdcdTVDNEZcXFxcSmVlY2dCb290XFxcXGplZWNnYm9vdC12dWUzXFxcXGJ1aWxkXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJGOlxcXFxcdTRFRDhcdTk5NzZcdTU5MjdcdTVDNEZcXFxcSmVlY2dCb290XFxcXGplZWNnYm9vdC12dWUzXFxcXGJ1aWxkXFxcXHV0aWxzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9GOi8lRTQlQkIlOTglRTklQTUlQjYlRTUlQTQlQTclRTUlQjElOEYvSmVlY2dCb290L2plZWNnYm9vdC12dWUzL2J1aWxkL3V0aWxzLnRzXCI7aW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBkb3RlbnYgZnJvbSAnZG90ZW52JztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RldkZuKG1vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBtb2RlID09PSAnZGV2ZWxvcG1lbnQnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9kRm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIG1vZGUgPT09ICdwcm9kdWN0aW9uJztcclxufVxyXG5cclxuLyoqXHJcbiAqIFdoZXRoZXIgdG8gZ2VuZXJhdGUgcGFja2FnZSBwcmV2aWV3XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNSZXBvcnRNb2RlKCk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5SRVBPUlQgPT09ICd0cnVlJztcclxufVxyXG5cclxuLy8gUmVhZCBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBwcm9jZXNzLmVudlxyXG5leHBvcnQgZnVuY3Rpb24gd3JhcHBlckVudihlbnZDb25mOiBSZWNvcmRhYmxlKTogVml0ZUVudiB7XHJcbiAgY29uc3QgcmV0OiBhbnkgPSB7fTtcclxuXHJcbiAgZm9yIChjb25zdCBlbnZOYW1lIG9mIE9iamVjdC5rZXlzKGVudkNvbmYpKSB7XHJcbiAgICBsZXQgcmVhbE5hbWUgPSBlbnZDb25mW2Vudk5hbWVdLnJlcGxhY2UoL1xcXFxuL2csICdcXG4nKTtcclxuICAgIHJlYWxOYW1lID0gcmVhbE5hbWUgPT09ICd0cnVlJyA/IHRydWUgOiByZWFsTmFtZSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogcmVhbE5hbWU7XHJcblxyXG4gICAgaWYgKGVudk5hbWUgPT09ICdWSVRFX1BPUlQnKSB7XHJcbiAgICAgIHJlYWxOYW1lID0gTnVtYmVyKHJlYWxOYW1lKTtcclxuICAgIH1cclxuICAgIGlmIChlbnZOYW1lID09PSAnVklURV9QUk9YWScgJiYgcmVhbE5hbWUpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZWFsTmFtZSA9IEpTT04ucGFyc2UocmVhbE5hbWUucmVwbGFjZSgvJy9nLCAnXCInKSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgcmVhbE5hbWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0W2Vudk5hbWVdID0gcmVhbE5hbWU7XHJcbiAgICBpZiAodHlwZW9mIHJlYWxOYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICBwcm9jZXNzLmVudltlbnZOYW1lXSA9IHJlYWxOYW1lO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVhbE5hbWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHByb2Nlc3MuZW52W2Vudk5hbWVdID0gSlNPTi5zdHJpbmdpZnkocmVhbE5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcmV0O1xyXG59XHJcblxyXG4vKipcclxuICogXHU4M0I3XHU1M0Q2XHU1RjUzXHU1MjREXHU3M0FGXHU1ODgzXHU0RTBCXHU3NTFGXHU2NTQ4XHU3Njg0XHU5MTREXHU3RjZFXHU2NTg3XHU0RUY2XHU1NDBEXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDb25mRmlsZXMoKSB7XHJcbiAgY29uc3Qgc2NyaXB0ID0gcHJvY2Vzcy5lbnYubnBtX2xpZmVjeWNsZV9zY3JpcHQ7XHJcbiAgLy8gdXBkYXRlLWJlZ2luLS1hdXRob3I6bGlhb3poaXlhbmctLS1kYXRlOjIwMjQwMzI2LS0tZm9yXHVGRjFBXHUzMDEwUVFZVU4tODY5MFx1MzAxMVx1NEZFRVx1NkI2M1x1ODNCN1x1NTNENlx1NUY1M1x1NTI0RFx1NzNBRlx1NTg4M1x1NEUwQlx1NzY4NFx1NjU4N1x1NEVGNlx1NTQwRFxyXG4gIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoJ05PREVfRU5WPShbYS16X1xcXFxkXSspJyk7XHJcbiAgLy8gdXBkYXRlLWVuZC0tYXV0aG9yOmxpYW96aGl5YW5nLS0tZGF0ZToyMDI0MDMyNi0tLWZvclx1RkYxQVx1MzAxMFFRWVVOLTg2OTBcdTMwMTFcdTRGRUVcdTZCNjNcdTgzQjdcdTUzRDZcdTVGNTNcdTUyNERcdTczQUZcdTU4ODNcdTRFMEJcdTc2ODRcdTY1ODdcdTRFRjZcdTU0MERcclxuICBjb25zdCByZXN1bHQgPSByZWcuZXhlYyhzY3JpcHQgYXMgc3RyaW5nKSBhcyBhbnk7XHJcbiAgaWYgKHJlc3VsdCkge1xyXG4gICAgY29uc3QgbW9kZSA9IHJlc3VsdFsxXSBhcyBzdHJpbmc7XHJcbiAgICByZXR1cm4gWycuZW52JywgYC5lbnYuJHttb2RlfWBdO1xyXG4gIH1cclxuICByZXR1cm4gWycuZW52JywgJy5lbnYucHJvZHVjdGlvbiddO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3RhcnRpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeFxyXG4gKiBAcGFyYW0gbWF0Y2ggcHJlZml4XHJcbiAqIEBwYXJhbSBjb25mRmlsZXMgZXh0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52Q29uZmlnKG1hdGNoID0gJ1ZJVEVfR0xPQl8nLCBjb25mRmlsZXMgPSBnZXRDb25mRmlsZXMoKSkge1xyXG4gIGxldCBlbnZDb25maWcgPSB7fTtcclxuICBjb25mRmlsZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZW52ID0gZG90ZW52LnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgaXRlbSkpKTtcclxuICAgICAgZW52Q29uZmlnID0geyAuLi5lbnZDb25maWcsIC4uLmVudiB9O1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBpbiBwYXJzaW5nICR7aXRlbX1gLCBlKTtcclxuICAgIH1cclxuICB9KTtcclxuICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKGBeKCR7bWF0Y2h9KWApO1xyXG4gIE9iamVjdC5rZXlzKGVudkNvbmZpZykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICBpZiAoIXJlZy50ZXN0KGtleSkpIHtcclxuICAgICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShlbnZDb25maWcsIGtleSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgcmV0dXJuIGVudkNvbmZpZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB1c2VyIHJvb3QgZGlyZWN0b3J5XHJcbiAqIEBwYXJhbSBkaXIgZmlsZSBwYXRoXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9vdFBhdGgoLi4uZGlyOiBzdHJpbmdbXSkge1xyXG4gIHJldHVybiBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgLi4uZGlyKTtcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkY6XFxcXFx1NEVEOFx1OTk3Nlx1NTkyN1x1NUM0RlxcXFxKZWVjZ0Jvb3RcXFxcamVlY2dib290LXZ1ZTNcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkY6XFxcXFx1NEVEOFx1OTk3Nlx1NTkyN1x1NUM0RlxcXFxKZWVjZ0Jvb3RcXFxcamVlY2dib290LXZ1ZTNcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cXFxcaW5kZXgudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Y6LyVFNCVCQiU5OCVFOSVBNSVCNiVFNSVBNCVBNyVFNSVCMSU4Ri9KZWVjZ0Jvb3QvamVlY2dib290LXZ1ZTMvYnVpbGQvdml0ZS9wbHVnaW4vaW5kZXgudHNcIjtpbXBvcnQgeyBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJztcclxuaW1wb3J0IHZ1ZSBmcm9tICdAdml0ZWpzL3BsdWdpbi12dWUnO1xyXG5pbXBvcnQgdnVlSnN4IGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZS1qc3gnO1xyXG5pbXBvcnQgcHVyZ2VJY29ucyBmcm9tICd2aXRlLXBsdWdpbi1wdXJnZS1pY29ucyc7XHJcbmltcG9ydCBVbm9DU1MgZnJvbSAndW5vY3NzL3ZpdGUnO1xyXG5pbXBvcnQgeyBwcmVzZXRUeXBvZ3JhcGh5LCBwcmVzZXRVbm8gfSBmcm9tICd1bm9jc3MnO1xyXG5pbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJztcclxuLy8gXHU2NzJDXHU1NzMwXHU4QzAzXHU4QkQ1aHR0cHNcdTkxNERcdTdGNkVcdTY1QjlcdTZDRDVcclxuaW1wb3J0IFZpdGVQbHVnaW5DZXJ0aWZpY2F0ZSBmcm9tICd2aXRlLXBsdWdpbi1ta2NlcnQnO1xyXG4vL1tpc3N1ZXMvNTU1XVx1NUYwMFx1NTNEMVx1NzNBRlx1NTg4M1x1RkYwQ3ZzY29kZVx1NjVBRFx1NzBCOVx1OEMwM1x1OEJENVx1RkYwQ1x1NjU4N1x1NEVGNlx1NjIxNlx1ODg0Q1x1NjU3MFx1NUJGOVx1NEUwRFx1NEUwQVxyXG5pbXBvcnQgdnVlU2V0dXBFeHRlbmQgZnJvbSAndml0ZS1wbHVnaW4tdnVlLXNldHVwLWV4dGVuZC1wbHVzJztcclxuaW1wb3J0IHsgY29uZmlnSHRtbFBsdWdpbiB9IGZyb20gJy4vaHRtbCc7XHJcbmltcG9ydCB7IGNvbmZpZ01vY2tQbHVnaW4gfSBmcm9tICcuL21vY2snO1xyXG5pbXBvcnQgeyBjb25maWdDb21wcmVzc1BsdWdpbiB9IGZyb20gJy4vY29tcHJlc3MnO1xyXG5pbXBvcnQgeyBjb25maWdWaXN1YWxpemVyQ29uZmlnIH0gZnJvbSAnLi92aXN1YWxpemVyJztcclxuaW1wb3J0IHsgY29uZmlnVGhlbWVQbHVnaW4gfSBmcm9tICcuL3RoZW1lJztcclxuaW1wb3J0IHsgY29uZmlnU3ZnSWNvbnNQbHVnaW4gfSBmcm9tICcuL3N2Z1Nwcml0ZSc7XHJcbi8vIC8vXHU5ODg0XHU3RjE2XHU4QkQxXHU1MkEwXHU4RjdEXHU2M0QyXHU0RUY2KFx1NEUwRFx1NjUyRlx1NjMwMXZpdGUzXHU0RjVDXHU1RTlGKVxyXG4vLyBpbXBvcnQgT3B0aW1pemF0aW9uUGVyc2lzdCBmcm9tICd2aXRlLXBsdWdpbi1vcHRpbWl6ZS1wZXJzaXN0JztcclxuLy8gaW1wb3J0IFBrZ0NvbmZpZyBmcm9tICd2aXRlLXBsdWdpbi1wYWNrYWdlLWNvbmZpZyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVml0ZVBsdWdpbnModml0ZUVudjogVml0ZUVudiwgaXNCdWlsZDogYm9vbGVhbikge1xyXG4gIGNvbnN0IHsgVklURV9VU0VfTU9DSywgVklURV9CVUlMRF9DT01QUkVTUywgVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEUgfSA9IHZpdGVFbnY7XHJcblxyXG4gIGNvbnN0IHZpdGVQbHVnaW5zOiAoUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10pW10gPSBbXHJcbiAgICAvLyBoYXZlIHRvXHJcbiAgICB2dWUoKSxcclxuICAgIC8vIGhhdmUgdG9cclxuICAgIHZ1ZUpzeCgpLFxyXG4gICAgLy8gc3VwcG9ydCBuYW1lXHJcbiAgICB2dWVTZXR1cEV4dGVuZCgpLFxyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgVml0ZVBsdWdpbkNlcnRpZmljYXRlKHtcclxuICAgICAgc291cmNlOiAnY29kaW5nJyxcclxuICAgIH0pLFxyXG4gIF07XHJcbiAgdml0ZVBsdWdpbnMucHVzaChBdXRvSW1wb3J0KHtcclxuICAgIGltcG9ydHM6IFsndnVlJywgJ3Z1ZS1yb3V0ZXInLCAndnVlLWkxOG4nLCAnQHZ1ZXVzZS9jb3JlJywgJ3BpbmlhJ10sXHJcbiAgfSkpO1xyXG5cclxuICB2aXRlUGx1Z2lucy5wdXNoKFVub0NTUyh7IHByZXNldHM6IFtwcmVzZXRVbm8oKSwgcHJlc2V0VHlwb2dyYXBoeSgpXSB9KSk7XHJcblxyXG4gIC8vIHZpdGUtcGx1Z2luLWh0bWxcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNvbmZpZ0h0bWxQbHVnaW4odml0ZUVudiwgaXNCdWlsZCkpO1xyXG5cclxuICAvLyB2aXRlLXBsdWdpbi1zdmctaWNvbnNcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNvbmZpZ1N2Z0ljb25zUGx1Z2luKGlzQnVpbGQpKTtcclxuXHJcbiAgLy8gdml0ZS1wbHVnaW4tbW9ja1xyXG4gIFZJVEVfVVNFX01PQ0sgJiYgdml0ZVBsdWdpbnMucHVzaChjb25maWdNb2NrUGx1Z2luKGlzQnVpbGQpKTtcclxuXHJcbiAgLy8gdml0ZS1wbHVnaW4tcHVyZ2UtaWNvbnNcclxuICB2aXRlUGx1Z2lucy5wdXNoKHB1cmdlSWNvbnMoKSk7XHJcblxyXG4gIC8vIHJvbGx1cC1wbHVnaW4tdmlzdWFsaXplclxyXG4gIHZpdGVQbHVnaW5zLnB1c2goY29uZmlnVmlzdWFsaXplckNvbmZpZygpKTtcclxuXHJcbiAgLy8gdml0ZS1wbHVnaW4tdGhlbWVcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNvbmZpZ1RoZW1lUGx1Z2luKGlzQnVpbGQpKTtcclxuXHJcbiAgLy8gVGhlIGZvbGxvd2luZyBwbHVnaW5zIG9ubHkgd29yayBpbiB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudFxyXG4gIGlmIChpc0J1aWxkKSB7XHJcblxyXG4gICAgLy8gcm9sbHVwLXBsdWdpbi1nemlwXHJcbiAgICB2aXRlUGx1Z2lucy5wdXNoKGNvbmZpZ0NvbXByZXNzUGx1Z2luKFZJVEVfQlVJTERfQ09NUFJFU1MsIFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFKSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gLy92aXRlLXBsdWdpbi10aGVtZVx1MzAxMFx1OTg4NFx1N0YxNlx1OEJEMVx1NTJBMFx1OEY3RFx1NjNEMlx1NEVGNlx1RkYwQ1x1ODlFM1x1NTFCM3ZpdGVcdTk5OTZcdTZCMjFcdTYyNTNcdTVGMDBcdTc1NENcdTk3NjJcdTUyQTBcdThGN0RcdTYxNjJcdTk1RUVcdTk4OThcdTMwMTFcclxuICAvLyB2aXRlUGx1Z2lucy5wdXNoKFBrZ0NvbmZpZygpKTtcclxuICAvLyB2aXRlUGx1Z2lucy5wdXNoKE9wdGltaXphdGlvblBlcnNpc3QoKSk7XHJcbiAgcmV0dXJuIHZpdGVQbHVnaW5zO1xyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRjpcXFxcXHU0RUQ4XHU5OTc2XHU1OTI3XHU1QzRGXFxcXEplZWNnQm9vdFxcXFxqZWVjZ2Jvb3QtdnVlM1xcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRjpcXFxcXHU0RUQ4XHU5OTc2XHU1OTI3XHU1QzRGXFxcXEplZWNnQm9vdFxcXFxqZWVjZ2Jvb3QtdnVlM1xcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblxcXFxodG1sLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9GOi8lRTQlQkIlOTglRTklQTUlQjYlRTUlQTQlQTclRTUlQjElOEYvSmVlY2dCb290L2plZWNnYm9vdC12dWUzL2J1aWxkL3ZpdGUvcGx1Z2luL2h0bWwudHNcIjsvKipcclxuICogUGx1Z2luIHRvIG1pbmltaXplIGFuZCB1c2UgZWpzIHRlbXBsYXRlIHN5bnRheCBpbiBpbmRleC5odG1sLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYW5uY3diL3ZpdGUtcGx1Z2luLWh0bWxcclxuICovXHJcbmltcG9ydCB0eXBlIHsgUGx1Z2luT3B0aW9uIH0gZnJvbSAndml0ZSc7XHJcbmltcG9ydCB7IGNyZWF0ZUh0bWxQbHVnaW4gfSBmcm9tICd2aXRlLXBsdWdpbi1odG1sJztcclxuaW1wb3J0IHBrZyBmcm9tICcuLi8uLi8uLi9wYWNrYWdlLmpzb24nO1xyXG5pbXBvcnQgeyBHTE9CX0NPTkZJR19GSUxFX05BTUUgfSBmcm9tICcuLi8uLi9jb25zdGFudCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29uZmlnSHRtbFBsdWdpbihlbnY6IFZpdGVFbnYsIGlzQnVpbGQ6IGJvb2xlYW4pIHtcclxuICBjb25zdCB7IFZJVEVfR0xPQl9BUFBfVElUTEUsIFZJVEVfUFVCTElDX1BBVEggfSA9IGVudjtcclxuXHJcbiAgY29uc3QgcGF0aCA9IFZJVEVfUFVCTElDX1BBVEguZW5kc1dpdGgoJy8nKSA/IFZJVEVfUFVCTElDX1BBVEggOiBgJHtWSVRFX1BVQkxJQ19QQVRIfS9gO1xyXG5cclxuICBjb25zdCBnZXRBcHBDb25maWdTcmMgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gYCR7cGF0aCB8fCAnLyd9JHtHTE9CX0NPTkZJR19GSUxFX05BTUV9P3Y9JHtwa2cudmVyc2lvbn0tJHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGh0bWxQbHVnaW46IFBsdWdpbk9wdGlvbltdID0gY3JlYXRlSHRtbFBsdWdpbih7XHJcbiAgICBtaW5pZnk6IGlzQnVpbGQsXHJcbiAgICBpbmplY3Q6IHtcclxuICAgICAgLy8gXHU0RkVFXHU2NTM5XHU2QTIxXHU2NzdGaHRtbFx1NzY4NFx1NjgwN1x1OTg5OFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgdGl0bGU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIFx1NUMwNmFwcC5jb25maWcuanNcdTY1ODdcdTRFRjZcdTZDRThcdTUxNjVcdTUyMzBcdTZBMjFcdTY3N0ZodG1sXHU0RTJEXHJcbiAgICAgIHRhZ3M6IGlzQnVpbGRcclxuICAgICAgICA/IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHRhZzogJ3NjcmlwdCcsXHJcbiAgICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgIHNyYzogZ2V0QXBwQ29uZmlnU3JjKCksXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF1cclxuICAgICAgICA6IFtdLFxyXG4gICAgfSxcclxuICB9KTtcclxuICByZXR1cm4gaHRtbFBsdWdpbjtcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkY6XFxcXFx1NEVEOFx1OTk3Nlx1NTkyN1x1NUM0RlxcXFxKZWVjZ0Jvb3RcXFxcamVlY2dib290LXZ1ZTNcXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkY6XFxcXFx1NEVEOFx1OTk3Nlx1NTkyN1x1NUM0RlxcXFxKZWVjZ0Jvb3RcXFxcamVlY2dib290LXZ1ZTNcXFxcYnVpbGRcXFxcY29uc3RhbnQudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Y6LyVFNCVCQiU5OCVFOSVBNSVCNiVFNSVBNCVBNyVFNSVCMSU4Ri9KZWVjZ0Jvb3QvamVlY2dib290LXZ1ZTMvYnVpbGQvY29uc3RhbnQudHNcIjsvKipcclxuICogVGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBlbnRlcmVkIGluIHRoZSBwcm9kdWN0aW9uIGVudmlyb25tZW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgR0xPQl9DT05GSUdfRklMRV9OQU1FID0gJ19hcHAuY29uZmlnLmpzJztcclxuXHJcbmV4cG9ydCBjb25zdCBPVVRQVVRfRElSID0gJ2NoYXJnZTInO1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkY6XFxcXFx1NEVEOFx1OTk3Nlx1NTkyN1x1NUM0RlxcXFxKZWVjZ0Jvb3RcXFxcamVlY2dib290LXZ1ZTNcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkY6XFxcXFx1NEVEOFx1OTk3Nlx1NTkyN1x1NUM0RlxcXFxKZWVjZ0Jvb3RcXFxcamVlY2dib290LXZ1ZTNcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cXFxcbW9jay50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRjovJUU0JUJCJTk4JUU5JUE1JUI2JUU1JUE0JUE3JUU1JUIxJThGL0plZWNnQm9vdC9qZWVjZ2Jvb3QtdnVlMy9idWlsZC92aXRlL3BsdWdpbi9tb2NrLnRzXCI7LyoqXHJcbiAqIE1vY2sgcGx1Z2luIGZvciBkZXZlbG9wbWVudCBhbmQgcHJvZHVjdGlvbi5cclxuICogaHR0cHM6Ly9naXRodWIuY29tL2FubmN3Yi92aXRlLXBsdWdpbi1tb2NrXHJcbiAqL1xyXG5pbXBvcnQgeyB2aXRlTW9ja1NlcnZlIH0gZnJvbSAndml0ZS1wbHVnaW4tbW9jayc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29uZmlnTW9ja1BsdWdpbihpc0J1aWxkOiBib29sZWFuKSB7XHJcbiAgcmV0dXJuIHZpdGVNb2NrU2VydmUoe1xyXG4gICAgaWdub3JlOiAvXlxcXy8sXHJcbiAgICBtb2NrUGF0aDogJ21vY2snLFxyXG4gICAgbG9jYWxFbmFibGVkOiAhaXNCdWlsZCxcclxuICAgIHByb2RFbmFibGVkOiBpc0J1aWxkLFxyXG4gICAgaW5qZWN0Q29kZTogYFxyXG4gICAgICBpbXBvcnQgeyBzZXR1cFByb2RNb2NrU2VydmVyIH0gZnJvbSAnLi4vbW9jay9fY3JlYXRlUHJvZHVjdGlvblNlcnZlcic7XHJcblxyXG4gICAgICBzZXR1cFByb2RNb2NrU2VydmVyKCk7XHJcbiAgICAgIGAsXHJcbiAgfSk7XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJGOlxcXFxcdTRFRDhcdTk5NzZcdTU5MjdcdTVDNEZcXFxcSmVlY2dCb290XFxcXGplZWNnYm9vdC12dWUzXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJGOlxcXFxcdTRFRDhcdTk5NzZcdTU5MjdcdTVDNEZcXFxcSmVlY2dCb290XFxcXGplZWNnYm9vdC12dWUzXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXFxcXGNvbXByZXNzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9GOi8lRTQlQkIlOTglRTklQTUlQjYlRTUlQTQlQTclRTUlQjElOEYvSmVlY2dCb290L2plZWNnYm9vdC12dWUzL2J1aWxkL3ZpdGUvcGx1Z2luL2NvbXByZXNzLnRzXCI7LyoqXHJcbiAqIFVzZWQgdG8gcGFja2FnZSBhbmQgb3V0cHV0IGd6aXAuIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHdvcmsgcHJvcGVybHkgaW4gVml0ZSwgdGhlIHNwZWNpZmljIHJlYXNvbiBpcyBzdGlsbCBiZWluZyBpbnZlc3RpZ2F0ZWRcclxuICogaHR0cHM6Ly9naXRodWIuY29tL2FubmN3Yi92aXRlLXBsdWdpbi1jb21wcmVzc2lvblxyXG4gKi9cclxuaW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJztcclxuaW1wb3J0IGNvbXByZXNzUGx1Z2luIGZyb20gJ3ZpdGUtcGx1Z2luLWNvbXByZXNzaW9uJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25maWdDb21wcmVzc1BsdWdpbihjb21wcmVzczogJ2d6aXAnIHwgJ2Jyb3RsaScgfCAnbm9uZScsIGRlbGV0ZU9yaWdpbkZpbGUgPSBmYWxzZSk6IFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdIHtcclxuICBjb25zdCBjb21wcmVzc0xpc3QgPSBjb21wcmVzcy5zcGxpdCgnLCcpO1xyXG5cclxuICBjb25zdCBwbHVnaW5zOiBQbHVnaW5PcHRpb25bXSA9IFtdO1xyXG5cclxuICBpZiAoY29tcHJlc3NMaXN0LmluY2x1ZGVzKCdnemlwJykpIHtcclxuICAgIHBsdWdpbnMucHVzaChcclxuICAgICAgY29tcHJlc3NQbHVnaW4oe1xyXG4gICAgICAgIHZlcmJvc2U6IHRydWUsXHJcbiAgICAgICAgZGlzYWJsZTogZmFsc2UsXHJcbiAgICAgICAgdGhyZXNob2xkOiAxMDI0MCxcclxuICAgICAgICBhbGdvcml0aG06ICdnemlwJyxcclxuICAgICAgICBleHQ6ICcuZ3onLFxyXG4gICAgICAgIGRlbGV0ZU9yaWdpbkZpbGUsXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcygnYnJvdGxpJykpIHtcclxuICAgIHBsdWdpbnMucHVzaChcclxuICAgICAgY29tcHJlc3NQbHVnaW4oe1xyXG4gICAgICAgIGV4dDogJy5icicsXHJcbiAgICAgICAgYWxnb3JpdGhtOiAnYnJvdGxpQ29tcHJlc3MnLFxyXG4gICAgICAgIGRlbGV0ZU9yaWdpbkZpbGUsXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICByZXR1cm4gcGx1Z2lucztcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkY6XFxcXFx1NEVEOFx1OTk3Nlx1NTkyN1x1NUM0RlxcXFxKZWVjZ0Jvb3RcXFxcamVlY2dib290LXZ1ZTNcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkY6XFxcXFx1NEVEOFx1OTk3Nlx1NTkyN1x1NUM0RlxcXFxKZWVjZ0Jvb3RcXFxcamVlY2dib290LXZ1ZTNcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cXFxcdmlzdWFsaXplci50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRjovJUU0JUJCJTk4JUU5JUE1JUI2JUU1JUE0JUE3JUU1JUIxJThGL0plZWNnQm9vdC9qZWVjZ2Jvb3QtdnVlMy9idWlsZC92aXRlL3BsdWdpbi92aXN1YWxpemVyLnRzXCI7LyoqXHJcbiAqIFBhY2thZ2UgZmlsZSB2b2x1bWUgYW5hbHlzaXNcclxuICovXHJcbmltcG9ydCB2aXN1YWxpemVyIGZyb20gJ3JvbGx1cC1wbHVnaW4tdmlzdWFsaXplcic7XHJcbmltcG9ydCB7IGlzUmVwb3J0TW9kZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25maWdWaXN1YWxpemVyQ29uZmlnKCkge1xyXG4gIC8vIGlmIChpc1JlcG9ydE1vZGUoKSkge1xyXG4gICAgcmV0dXJuIHZpc3VhbGl6ZXIoe1xyXG4gICAgICBmaWxlbmFtZTogJy4vbm9kZV9tb2R1bGVzLy5jYWNoZS92aXN1YWxpemVyL3N0YXRzLmh0bWwnLFxyXG4gICAgICBvcGVuOiB0cnVlLFxyXG4gICAgICBnemlwU2l6ZTogdHJ1ZSxcclxuICAgICAgYnJvdGxpU2l6ZTogdHJ1ZSxcclxuICAgIH0pIGFzIFBsdWdpbjtcclxuICAvLyB9XHJcbiAgcmV0dXJuIFtdO1xyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRjpcXFxcXHU0RUQ4XHU5OTc2XHU1OTI3XHU1QzRGXFxcXEplZWNnQm9vdFxcXFxqZWVjZ2Jvb3QtdnVlM1xcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRjpcXFxcXHU0RUQ4XHU5OTc2XHU1OTI3XHU1QzRGXFxcXEplZWNnQm9vdFxcXFxqZWVjZ2Jvb3QtdnVlM1xcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblxcXFx0aGVtZS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRjovJUU0JUJCJTk4JUU5JUE1JUI2JUU1JUE0JUE3JUU1JUIxJThGL0plZWNnQm9vdC9qZWVjZ2Jvb3QtdnVlMy9idWlsZC92aXRlL3BsdWdpbi90aGVtZS50c1wiOy8qKlxyXG4gKiBWaXRlIHBsdWdpbiBmb3Igd2Vic2l0ZSB0aGVtZSBjb2xvciBzd2l0Y2hpbmdcclxuICogaHR0cHM6Ly9naXRodWIuY29tL2FubmN3Yi92aXRlLXBsdWdpbi10aGVtZVxyXG4gKi9cclxuaW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7IHZpdGVUaGVtZVBsdWdpbiwgYW50ZERhcmtUaGVtZVBsdWdpbiwgbWl4TGlnaHRlbiwgbWl4RGFya2VuLCB0aW55Y29sb3IgfSBmcm9tICdAcnlzLWZlL3ZpdGUtcGx1Z2luLXRoZW1lJztcclxuaW1wb3J0IHsgZ2V0VGhlbWVDb2xvcnMsIGdlbmVyYXRlQ29sb3JzIH0gZnJvbSAnLi4vLi4vY29uZmlnL3RoZW1lQ29uZmlnJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVNb2RpZnlWYXJzIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGUvZ2VuZXJhdGVNb2RpZnlWYXJzJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25maWdUaGVtZVBsdWdpbihpc0J1aWxkOiBib29sZWFuKTogUGx1Z2luT3B0aW9uW10ge1xyXG4gIGNvbnN0IGNvbG9ycyA9IGdlbmVyYXRlQ29sb3JzKHtcclxuICAgIG1peERhcmtlbixcclxuICAgIG1peExpZ2h0ZW4sXHJcbiAgICB0aW55Y29sb3IsXHJcbiAgfSk7XHJcblxyXG4gIC8vIHVwZGF0ZS1iZWdpbi1cdTRGRUVcdTU5MERcdTdGMTZcdThCRDFcdTU0MEVcdTRFM0JcdTk4OThcdTgyNzJcdTUyMDdcdTYzNjJcdTRFMERcdTc1MUZcdTY1NDhcdTlFRDFcdTVDNEZcdTc2ODRcdTk1RUVcdTk4OTgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92YmVuanMvdnVlLXZiZW4tYWRtaW4vaXNzdWVzLzE0NDVcclxuICAvLyBcdTYyQkRcdTUzRDZcdTUxRkF2aXRlVGhlbWVQbHVnaW5cdTYzRDJcdTRFRjZcdUZGMENcdTRFMEJcdTY1QjlcdTRGMUFcdTY4MzlcdTYzNkVcdTRFMERcdTU0MENcdTczQUZcdTU4ODNcdThCQkVcdTdGNkVlbmZvcmNlXHJcbiAgY29uc3Qgdml0ZV90aGVtZV9wbHVnaW4gPSB2aXRlVGhlbWVQbHVnaW4oe1xyXG4gICAgcmVzb2x2ZVNlbGVjdG9yOiAocykgPT4ge1xyXG4gICAgICBzID0gcy50cmltKCk7XHJcbiAgICAgIHN3aXRjaCAocykge1xyXG4gICAgICAgIGNhc2UgJy5hbnQtc3RlcHMtaXRlbS1wcm9jZXNzIC5hbnQtc3RlcHMtaXRlbS1pY29uID4gLmFudC1zdGVwcy1pY29uJzpcclxuICAgICAgICAgIHJldHVybiAnLmFudC1zdGVwcy1pdGVtLWljb24gPiAuYW50LXN0ZXBzLWljb24nO1xyXG4gICAgICAgIGNhc2UgJy5hbnQtcmFkaW8tYnV0dG9uLXdyYXBwZXItY2hlY2tlZDpub3QoLmFudC1yYWRpby1idXR0b24td3JhcHBlci1kaXNhYmxlZCknOlxyXG4gICAgICAgIGNhc2UgJy5hbnQtcmFkaW8tYnV0dG9uLXdyYXBwZXItY2hlY2tlZDpub3QoLmFudC1yYWRpby1idXR0b24td3JhcHBlci1kaXNhYmxlZCk6aG92ZXInOlxyXG4gICAgICAgIGNhc2UgJy5hbnQtcmFkaW8tYnV0dG9uLXdyYXBwZXItY2hlY2tlZDpub3QoLmFudC1yYWRpby1idXR0b24td3JhcHBlci1kaXNhYmxlZCk6YWN0aXZlJzpcclxuICAgICAgICAgIHJldHVybiBzO1xyXG4gICAgICAgIGNhc2UgJy5hbnQtc3RlcHMtaXRlbS1pY29uID4gLmFudC1zdGVwcy1pY29uJzpcclxuICAgICAgICAgIHJldHVybiBzO1xyXG4gICAgICAgIGNhc2UgJy5hbnQtc2VsZWN0LWl0ZW0tb3B0aW9uLXNlbGVjdGVkOm5vdCguYW50LXNlbGVjdC1pdGVtLW9wdGlvbi1kaXNhYmxlZCknOlxyXG4gICAgICAgICAgcmV0dXJuIHM7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlmIChzLmluZGV4T2YoJy5hbnQtYnRuJykgPj0gLTEpIHtcclxuICAgICAgICAgICAgLy8gXHU2MzA5XHU5NEFFXHU4OEFCXHU5MUNEXHU2NUIwXHU1QjlBXHU1MjM2XHU4RkM3XHVGRjBDXHU5NzAwXHU4OTgxXHU4RkM3XHU2RUU0XHU2Mzg5Y2xhc3NcdTk2MzJcdTZCNjJcdTg5ODZcdTc2RDZcclxuICAgICAgICAgICAgcmV0dXJuIHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHMuc3RhcnRzV2l0aCgnW2RhdGEtdGhlbWUnKSA/IHMgOiBgW2RhdGEtdGhlbWVdICR7c31gO1xyXG4gICAgfSxcclxuICAgIGNvbG9yVmFyaWFibGVzOiBbLi4uZ2V0VGhlbWVDb2xvcnMoKSwgLi4uY29sb3JzXSxcclxuICB9KTtcclxuICB2aXRlX3RoZW1lX3BsdWdpbi5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAvL1x1NUJGOXZpdGU6dGhlbWVcdTYzRDJcdTRFRjZcdTcyNzlcdTZCOEFcdTkxNERcdTdGNkVcclxuICAgIGlmICgndml0ZTp0aGVtZScgPT09IGl0ZW0ubmFtZSkge1xyXG4gICAgICAvLyBcdTYyNTNcdTUzMDVcdTY1RjZcdTUzQkJcdTk2NjRlbmZvcmNlOiBcInBvc3RcIlx1RkYwQ3ZpdGUgMi42LnhcdTkwMDJcdTkxNERcdUZGMENcdTU0MjZcdTUyMTlcdTc1MUZcdTYyMTBhcHAtdGhlbWUtc3R5bGVcdTRFM0FcdTdBN0FcdUZGMENcdTU2RTBcdTRFM0Fhc3luYyB0cmFuc2Zvcm0oY29kZSwgaWQpIHtcdTc2ODRjb2RlXHU2Q0ExXHU2NzA5XHU2QjYzXHU3ODZFXHU4M0I3XHU1M0Q2XHJcbiAgICAgIGlmIChpc0J1aWxkKSB7XHJcbiAgICAgICAgZGVsZXRlIGl0ZW0uZW5mb3JjZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG4gIC8vIHVwZGF0ZS1lbmQtXHU0RkVFXHU1OTBEXHU3RjE2XHU4QkQxXHU1NDBFXHU0RTNCXHU5ODk4XHU4MjcyXHU1MjA3XHU2MzYyXHU0RTBEXHU3NTFGXHU2NTQ4XHU5RUQxXHU1QzRGXHU3Njg0XHU5NUVFXHU5ODk4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgY29uc3QgcGx1Z2luID0gW1xyXG4gICAgdml0ZV90aGVtZV9wbHVnaW4sXHJcbiAgICBhbnRkRGFya1RoZW1lUGx1Z2luKHtcclxuICAgICAgcHJlbG9hZEZpbGVzOiBbXHJcbiAgICAgICAgLy8gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdub2RlX21vZHVsZXMvYW50LWRlc2lnbi12dWUvZGlzdC9yZXNldC5jc3MnKSxcclxuICAgICAgICAvL3BhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL2FudC1kZXNpZ24tdnVlL2Rpc3QvYW50ZC5kYXJrLmxlc3MnKSxcclxuICAgICAgICBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3NyYy9kZXNpZ24vaW5kZXgubGVzcycpLFxyXG4gICAgICBdLFxyXG4gICAgICBmaWx0ZXI6IChpZCkgPT4gKGlzQnVpbGQgPyAhaWQuZW5kc1dpdGgoJ2FudGQubGVzcycpIDogdHJ1ZSksXHJcbiAgICAgIC8vIGV4dHJhY3RDc3M6IGZhbHNlLFxyXG4gICAgICBkYXJrTW9kaWZ5VmFyczoge1xyXG4gICAgICAgIC4uLmdlbmVyYXRlTW9kaWZ5VmFycyh0cnVlKSxcclxuICAgICAgICAndGV4dC1jb2xvcic6ICcjYzlkMWQ5JyxcclxuICAgICAgICAncHJpbWFyeS0xJzogJ3JnYigyNTUgMjU1IDI1NSAvIDglKScsXHJcbiAgICAgICAgJ3RleHQtY29sb3ItYmFzZSc6ICcjYzlkMWQ5JyxcclxuICAgICAgICAnY29tcG9uZW50LWJhY2tncm91bmQnOiAnIzE1MTUxNScsXHJcbiAgICAgICAgJ2hlYWRpbmctY29sb3InOiAncmdiKDI1NSAyNTUgMjU1IC8gNjUlKScsXHJcbiAgICAgICAgLy8gYmxhY2s6ICcjMGUxMTE3JyxcclxuICAgICAgICAvLyAjOGI5NDllXHJcbiAgICAgICAgJ3RleHQtY29sb3Itc2Vjb25kYXJ5JzogJyM4Yjk0OWUnLFxyXG4gICAgICAgICdib3JkZXItY29sb3ItYmFzZSc6ICcjMzAzMDMwJyxcclxuICAgICAgICAnaGVhZGVyLWxpZ2h0LWJvdHRvbS1ib3JkZXItY29sb3InOiAnIzMwMzAzMCcsXHJcbiAgICAgICAgLy8gJ2JvcmRlci1jb2xvci1zcGxpdCc6ICcjMzAzNjNkJyxcclxuICAgICAgICAnaXRlbS1hY3RpdmUtYmcnOiAnIzExMWIyNicsXHJcbiAgICAgICAgJ2FwcC1jb250ZW50LWJhY2tncm91bmQnOiAnIzFlMWUxZScsXHJcbiAgICAgICAgJ3RyZWUtbm9kZS1zZWxlY3RlZC1iZyc6ICcjMTEyNjNjJyxcclxuXHJcbiAgICAgICAgJ2FsZXJ0LXN1Y2Nlc3MtYm9yZGVyLWNvbG9yJzogJyMyNzQ5MTYnLFxyXG4gICAgICAgICdhbGVydC1zdWNjZXNzLWJnLWNvbG9yJzogJyMxNjIzMTInLFxyXG4gICAgICAgICdhbGVydC1zdWNjZXNzLWljb24tY29sb3InOiAnIzQ5YWExOScsXHJcbiAgICAgICAgJ2FsZXJ0LWluZm8tYm9yZGVyLWNvbG9yJzogJyMxNTM0NTAnLFxyXG4gICAgICAgICdhbGVydC1pbmZvLWJnLWNvbG9yJzogJyMxMTFiMjYnLFxyXG4gICAgICAgICdhbGVydC1pbmZvLWljb24tY29sb3InOiAnIzE3N2RkYycsXHJcbiAgICAgICAgJ2FsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yJzogJyM1OTQyMTQnLFxyXG4gICAgICAgICdhbGVydC13YXJuaW5nLWJnLWNvbG9yJzogJyMyYjIxMTEnLFxyXG4gICAgICAgICdhbGVydC13YXJuaW5nLWljb24tY29sb3InOiAnI2Q4OTYxNCcsXHJcbiAgICAgICAgJ2FsZXJ0LWVycm9yLWJvcmRlci1jb2xvcic6ICcjNTgxODFjJyxcclxuICAgICAgICAnYWxlcnQtZXJyb3ItYmctY29sb3InOiAnIzJhMTIxNScsXHJcbiAgICAgICAgJ2FsZXJ0LWVycm9yLWljb24tY29sb3InOiAnI2E2MWQyNCcsXHJcbiAgICAgIH0sXHJcbiAgICB9KSxcclxuICBdO1xyXG5cclxuICByZXR1cm4gcGx1Z2luIGFzIHVua25vd24gYXMgUGx1Z2luT3B0aW9uW107XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJGOlxcXFxcdTRFRDhcdTk5NzZcdTU5MjdcdTVDNEZcXFxcSmVlY2dCb290XFxcXGplZWNnYm9vdC12dWUzXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJGOlxcXFxcdTRFRDhcdTk5NzZcdTU5MjdcdTVDNEZcXFxcSmVlY2dCb290XFxcXGplZWNnYm9vdC12dWUzXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXFxcXHN2Z1Nwcml0ZS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRjovJUU0JUJCJTk4JUU5JUE1JUI2JUU1JUE0JUE3JUU1JUIxJThGL0plZWNnQm9vdC9qZWVjZ2Jvb3QtdnVlMy9idWlsZC92aXRlL3BsdWdpbi9zdmdTcHJpdGUudHNcIjsvKipcclxuICogIFZpdGUgUGx1Z2luIGZvciBmYXN0IGNyZWF0aW5nIFNWRyBzcHJpdGVzLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYW5uY3diL3ZpdGUtcGx1Z2luLXN2Zy1pY29uc1xyXG4gKi9cclxuXHJcbmltcG9ydCB7IGNyZWF0ZVN2Z0ljb25zUGx1Z2luIH0gZnJvbSAndml0ZS1wbHVnaW4tc3ZnLWljb25zJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29uZmlnU3ZnSWNvbnNQbHVnaW4oaXNCdWlsZDogYm9vbGVhbikge1xyXG4gIGNvbnN0IHN2Z0ljb25zUGx1Z2luID0gY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xyXG4gICAgaWNvbkRpcnM6IFtwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3NyYy9hc3NldHMvaWNvbnMnKV0sXHJcbiAgICBzdmdvT3B0aW9uczogaXNCdWlsZCxcclxuICAgIC8vIGRlZmF1bHRcclxuICAgIHN5bWJvbElkOiAnaWNvbi1bZGlyXS1bbmFtZV0nLFxyXG4gIH0pO1xyXG4gIHJldHVybiBzdmdJY29uc1BsdWdpbjtcclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUE7QUFBQSxFQUNFLE1BQVE7QUFBQSxFQUNSLFNBQVc7QUFBQSxFQUNYLFFBQVU7QUFBQSxJQUNSLE1BQVE7QUFBQSxJQUNSLE9BQVM7QUFBQSxJQUNULEtBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxNQUFRO0FBQUEsRUFDUixTQUFXO0FBQUEsSUFDVCxhQUFlO0FBQUEsSUFDZixVQUFZO0FBQUEsSUFDWixlQUFlO0FBQUEsSUFDZixLQUFPO0FBQUEsSUFDUCxPQUFTO0FBQUEsSUFDVCxnQkFBZ0I7QUFBQSxJQUNoQixTQUFXO0FBQUEsSUFDWCxXQUFhO0FBQUEsSUFDYixhQUFhO0FBQUEsSUFDYixZQUFZO0FBQUEsSUFDWixrQkFBa0I7QUFBQSxJQUNsQixlQUFlO0FBQUEsSUFDZixpQkFBaUI7QUFBQSxFQUNuQjtBQUFBLEVBQ0EsY0FBZ0I7QUFBQSxJQUNkLHNCQUFzQjtBQUFBLElBQ3RCLHlCQUF5QjtBQUFBLElBQ3pCLG9CQUFvQjtBQUFBLElBQ3BCLGlCQUFpQjtBQUFBLElBQ2pCLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLElBQ2hCLG1CQUFtQjtBQUFBLElBQ25CLGtCQUFrQjtBQUFBLElBQ2xCLE9BQVM7QUFBQSxJQUNULG1CQUFtQjtBQUFBLElBQ25CLFdBQWE7QUFBQSxJQUNiLFlBQWM7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QkFBaUI7QUFBQSxVQUM3QztBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUE7QUFBQSxNQUVBLHNCQUFzQjtBQUFBO0FBQUEsTUFFdEIsdUJBQXVCO0FBQUEsSUFDeEI7QUFBQSxJQUNBLFNBQVM7QUFBQTtBQUFBLE1BRVIsTUFBTSxVQUFVLENBQUMsV0FBVyxVQUFVLElBQUksQ0FBQztBQUFBLElBQzVDO0FBQUEsSUFDQSxRQUFRO0FBQUE7QUFBQTtBQUFBLE1BR1AsMkJBQTJCO0FBQUEsTUFDM0IsY0FBYyxLQUFLLFVBQVUsWUFBWTtBQUFBLElBQzFDO0FBQUEsSUFDQSxLQUFLO0FBQUEsTUFDSixxQkFBcUI7QUFBQSxRQUNwQixNQUFNO0FBQUEsVUFDTCxZQUFZLG1CQUFtQjtBQUFBLFVBQy9CLG1CQUFtQjtBQUFBLFFBQ3BCO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQTtBQUFBLElBR0EsU0FBUyxrQkFBa0IsU0FBUyxPQUFPO0FBQUE7QUFBQSxJQUUzQyxjQUFjO0FBQUEsTUFDYixnQkFBZ0I7QUFBQSxRQUNmLFFBQVE7QUFBQSxNQUNUO0FBQUEsTUFDQSxTQUFTO0FBQUE7QUFBQSxRQUVSO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQ0Q7IiwKICAibmFtZXMiOiBbInJlc29sdmUiLCAidGhlbWUiLCAibWl4TGlnaHRlbiIsICJtaXhEYXJrZW4iLCAidGlueWNvbG9yIiwgImdlbmVyYXRlIiwgImdlbmVyYXRlQW50Q29sb3JzIiwgInRoZW1lIiwgImdlbmVyYXRlIiwgInBhdGgiLCAicGF0aCIsICJwYXRoIiwgInJlc29sdmUiLCAicGF0aCJdCn0K
